Я пытаюсь понять, почему этот простой код приводит к ошибке сегментации, когда я пытаюсь скопировать некоторые символы в общую память, используя strcpy
:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>
int main()
{
key_t key;
int flag,id;
char *buf;
flag=IPC_CREAT|0600;
if((key=ftok("myfile",12)) == -1 ) {
perror("key");
exit(2);
}
printf("%X\n",key);
if( (id=shmget(key,512,flag)) < 0) exit(1);
if( (buf=shmat(id,0,0)) < 0) exit(2);
printf("PID %d, buf=%p\n",getpid(),buf);
system("ipcs -m | grep 512");
sleep(20);
strcpy(buf,"Hello");
sleep(100);
shmdt(buf);
exit(0);
}
И вот что я получаю:
C1A0DAB
PID 12063, buf=0xffffffff8bc78000
0x0c1a0dab 271941746 username 600 512 1
Segmentation fault (core dumped)
Кроме того, pmap процесса указывает:
00007f778bc78000 4K rw-s- [ shmid=0x10358072 ]
Я предполагаю, что что-то не так с указателем buf
, но я пока не знаю, как это исправить.
Любые идеи?