【发布时间】:2017-09-22 09:58:01
【问题描述】:
我的“main”函数中有这段代码。
...
int data_size1 = sizeof(dados);
int fdDados = shm_open("/dados", O_CREAT|O_RDWR, S_IRUSR|S_IWUSR);
if (fdDados<0){
perror("shm_open failed");
exit(1);
}
dados* shared_data_dados=(dados*) mmap(NULL, data_size1, PROT_READ|PROT_WRITE, MAP_SHARED, fdDados, 0);
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
char auxMsg[91];
sprintf(auxMsg, "Pid=%d, time=%s", getpid(), asctime(timeinfo));
printf(auxMsg);
strcpy((shared_data_dados->msg), auxMsg);
...
它包括以下.h:
typedef struct {
char msg[101];
} dados;
问题是,当我对结构执行 strcpy 时,它给了我一个总线错误。我尝试将结构更改为 char*,并将 char* 放在 strcpy 的原始部分,但我仍然遇到相同的错误。 printf 打印正确的“消息”,所以这不应该是问题......
感谢任何帮助。
提前致谢!
【问题讨论】:
-
仅仅因为 printf 有效,并不意味着您没有跑出缓冲区的末尾 - print strlen(auxMsg) 也是如此。尝试将 shmopen 的文件名更改为“./dados”之类的名称。 shmopen 创建一个文件描述符 - 如果您无权访问 /,它可能无法工作
-
我已经尝试了这两个建议,但都没有奏效。 strlen 的 printf 按预期打印“40”。