我正在編寫一個程序來解決操作系統概念的練習。這個問題是在子進程上創建一個Collatz猜想,並使用Posix共享memeory將其打印回父進程。這是我的程序。Posix在父進程和子進程之間共享內存?
int main(int argc, char* argv[])
{
const char* name = "Collatz";
const int SIZE = 4096 * 30;
void *ptr;
int shm_fd;
int num = atoi(argv[1]);
pid_t pid;
shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, SIZE);
ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
if (ptr < 0) perror("Ptr error");
pid = fork();
if (pid < 0) perror("Fork Failed");
else if (pid == 0) {
shm_fd = shm_open(name, O_RDWR, 0666);
ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (ptr < 0) perror("Ptr error");
while (num != 1) {
sprintf(ptr, "%d", num);
ptr++;
if (num % 2 == 0) num /= 2;
else num = 3 * num + 1;
}
sprintf(ptr, "%d", num);
ptr++;
} else {
wait(NULL);
printf("Parent: %s\n", (char*) ptr);
//ptr += sizeof(int);
shm_unlink(name);
}
return 0;
}
但是,當我與海灣合作委員會 complie它,我得到分割故障(核心轉儲)。儘管通過谷歌搜索,但我不知道它。我使用Ubuntu 14.04。有人可以幫助我嗎?非常感謝你,併爲我可憐的英語感到難過。
編譯時,你得到段錯誤?不在運行時? – Henrik
如果你使用的是gcc,那麼你也應該使用gdb。 – stark
可憐的我,我沒有傳遞一個整數參數。 – toantruong