西瓜网络深圳网站建设 东莞网站建设,3d云设计平台,什么是模板建站,深圳网红打卡旅游景点共享内存由于是多进程共享的#xff0c;里面的数据不适合包含指针#xff0c;因为共享内存在不同进程里的地址并不相同。尽管可以在连接共享内存时指定连接地址#xff0c;但是#xff0c;这样做限制太多#xff1a;
不同硬件、系统这个地址可能不一样#xff0c;没有通… 共享内存由于是多进程共享的里面的数据不适合包含指针因为共享内存在不同进程里的地址并不相同。尽管可以在连接共享内存时指定连接地址但是这样做限制太多
不同硬件、系统这个地址可能不一样没有通用性动态挂载、卸载不能保证地址可用从而只能在进程加载时尽早连接共享内存不同的使用共享内存的组件存在冲突可能导致地址不可用 因此坚持由系统分配连接地址是合理的。这样就要求共享内存里的数据不包含指针通常我们都选择只使用简单结构但是即使是简单结构我们也可以尽量包装一下方便使用。 这里就是一个字符串的模板sstringint用来替代sstring。设计思想很简单就是个定长数组提供类似string的操作。 这个代码在sstring后面还包含了两个运算符重载用来支持和。 代码是用于unix/linux的。
#include cstring
#include string//定长字符数组模板共享内存不能用stringchar[]又不安全
template long BUFSIZE
class sstring
{
private:char data[BUFSIZE];static void _copydata(char * buf, char const * source){buf[BUFSIZE - 1] \0;long i 0;for (; i BUFSIZE - 1; i){buf[i] source[i];if (\0 source[i])break;}for (; i BUFSIZE - 1; i){buf[i] \0;}}
public:sstring() { memset(data, 0, BUFSIZE); }~sstring() { memset(data, 0, BUFSIZE); }sstring(sstring const tmp) { _copydata(data, tmp.data); }sstring(char const * psz) { _copydata(data, psz); }sstring(std::string const str) { _copydata(data, str.c_str()); }sstring operator(sstring const tmp) { _copydata(data, tmp.data); return *this; }sstring operator(char const * psz) { _copydata(data, psz); return *this; }sstring operator(std::string const tmp) { _copydata(data, tmp.c_str()); return *this; }long size()const { return strlen(data); }char const * c_str()const { return data; }char const operator [](long off)const { return data[off]; }bool operator (char const * tmp)const { return 0 strcmp(data, tmp); }bool operator (sstring const tmp)const { return 0 strcmp(data, tmp.data); }bool operator (std::string const tmp)const { return 0 strcmp(data, tmp.c_str()); }bool operator ! (char const * tmp)const { return 0 ! strcmp(data, tmp); }bool operator ! (sstring const tmp)const { return 0 ! strcmp(data, tmp.data); }bool operator ! (std::string const tmp)const { return 0 ! strcmp(data, tmp.c_str()); }bool operator (char const * tmp)const { return 0 strcmp(data, tmp); }bool operator (sstring const tmp)const { return 0 strcmp(data, tmp.data); }bool operator (std::string const tmp)const { return 0 strcmp(data, tmp.c_str()); }bool operator (char const * tmp)const { return 0 strcmp(data, tmp); }bool operator (sstring const tmp)const { return 0 strcmp(data, tmp.data); }bool operator (std::string const tmp)const { return 0 strcmp(data, tmp.c_str()); }bool operator (char const * tmp)const { return 0 strcmp(data, tmp); }bool operator (sstring const tmp)const { return 0 strcmp(data, tmp.data); }bool operator (std::string const tmp)const { return 0 strcmp(data, tmp.c_str()); }bool operator (char const * tmp)const { return 0 strcmp(data, tmp); }bool operator (sstring const tmp)const { return 0 strcmp(data, tmp.data); }bool operator (std::string const tmp)const { return 0 strcmp(data, tmp.c_str()); }
};template long BUFSIZE
inline std::ostream operator (std::ostream out, sstringBUFSIZE const data)
{out data.c_str();return out;
}template long BUFSIZE
inline std::istream operator (std::istream in, sstringBUFSIZE data)
{std::string tmp;in tmp;data tmp;return in;
}这个代码在我的共享内存体系里是个基础对象广泛使用。 这里是结束