#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/shm.h>
int main()
{
int shmid;
char *viraddr;
char buffer[BUFSIZ];
shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT);
viraddr=(char*)shmat(shmid, 0,0);
while(1)
{
puts("Enter some text:");
fgets(buffer,BUFSIZ,stdin);
strcat(viraddr,buffer);
if(strncmp(buffer,"end",3)==0)
break;
}
shmdt(viraddr);
exit(0);
}
Я изучаю общую память. Я хочу реализовать связь между двумя процессами. Когда я запускаю эту программу, она всегда указывает на эту ошибку - segmentation fault core dumped
. Любая помощь по этому поводу? Благодарю.Общая память: сегментная ошибка ядра сбрасывается
Работает отлично для меня ... Fedora 20 64 бит, + valgrind ... –
Я считаю, что вы должны использовать 'strcpy' вместо' strcat', потому что вы не знаете, есть ли мусор в памяти на ' viraddr'. Почему это работает для dgunchev, вероятно, потому, что память в адресе, возвращаемом 'shmat', просто оказалась 0s. – Nard
Нет, это работает, потому что 'IPC_CREAT' используется для создания нового сегмента ... и, когда создается новый сегмент разделяемой памяти, его содержимое инициализируется нулевыми значениями. См. 'Man 2 shmget'. –