大衛Shwartz幫助我很多,現在它有點作品... 你有任何想法更加優雅的方式來解析輸入,如果輸入包含超過2個數字添加哪些需要由孩子處理?我希望孩子只能得到兩個整數,這就是爲什麼我創建共享內存的原因,因此父親會將結果(共享內存)+另一個整數發送給孩子。共享內存父親和孩子在c
謝謝大家。
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
volatile int *shared=0;
int shmid;
int main()
{
char line[256];
int readByte;
int fd[2]; //pipe to son, who processes addition
int pid;
shmid=shmget (IPC_PRIVATE, sizeof(int) , 0600);
shared=shmat (shmid, 0 , 0);
if (pipe(fd))
{
perror("pipe");
exit(-1);
}
pid=fork();
if (pid!=0) // father
{
close (fd[0]);
readByte=read(0, line, 256);
line[readByte-1]='\0';
printf("%d",readByte);
int arr[2];
int i=0;
int j=0;
int flag=0;
char num[10];
while (i<readByte)
{
if (line[i]=='+')
{
i++;
j=0;
flag=1;
}
while (line[i]!='+' && line[i]!='\0')
{
num[j]=line[i];
i++;
j++;
}
num[j]='\0';
if (flag==0)
arr[0]=atoi(num);
else
{
arr[1]=atoi(num);
i++;
}
}
printf("first %d\n",arr[0]);
printf("sec %d\n",arr[1]);
write(fd[1], &arr, sizeof(arr));
wait(NULL);
printf ("%d\n" , *shared);
}
else
// son
{
int arr[2];
int sum;
readByte = read(fd[0], &arr, sizeof(arr));
printf("son printing: %d\n",arr[0]);
printf("son printing: %d\n",arr[1]);
sum =arr[0]+arr[1];
*shared=sum;
close (fd[0]);
shmdt ((const void *) shared);
}
shmdt ((const void *) shared);
shmctl (shmid , IPC_RMID , 0);
close(fd[1]);
return 0;
}
變量'shared'不共享,共享內存區域共享。您需要在共享內存區域內更改*內容。 –
另外,你扔掉'shmat'的結果,這也沒有幫助。 –