我在我的“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打印正确的“消息”,使其不应该成为问题...
任何帮助是apreciated。
在此先感谢!
仅仅因为printf的工作原理,并不意味着你还没有跑出缓冲区的末端 - print strlen(auxMsg)。尝试将shmopen的文件名改为“./dados”。 shmopen创建一个文件描述符 - 如果你没有访问/,它可能不起作用 – cup
我已经尝试了这两个建议,他们都没有工作。正如所示,strlen的printf打印“40”。 –