以下是共享內存實現的程序,其中父進程和子進程將使用共享內存來打印父進程給出的下一個字母表。爲什麼父進程根本不執行?
有一個共享內存,兩個進程都附加到它以獲得所需的結果。在我的代碼中,父進程根本不執行。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
int main(int argc,char *argv[])
{
int smid;
pid_t x;
char *sm;
smid=shmget(IPC_PRIVATE,(size_t)sizeof(char),IPC_CREAT);
x=fork();
if(x>0)
{
sm=(char *)shmat(smid,NULL,0);
sprintf(sm,"%s",argv[1]);
printf("Parent wrote:\n");
puts(sm);
sleep(4);
printf("Parent got:\n");
puts(sm);
shmdt(sm);
shmctl(smid,IPC_RMID,NULL);
}
else if(x==0)
{
sleep(2);
sm=(char *)shmat(smid,NULL,0);
printf("Child read:\n");
puts(sm);
sm[0]++;
}
return 0;
}
結論性的語句沒有幫助。你需要告訴我們你期望的輸出和你得到的輸出。或者,至少,*你如何得出父母不執行的結論。 –
控件不會進入父進程的塊。 「父母寫」或「父母得到」根本沒有被輸出。而是它說「分段錯誤(核心轉儲)」 –
再次,這是一個結論。什麼讓你有那個想法?你有什麼證據可以得出這個結論?你期望什麼?你觀察到了什麼? –