我想同步父进程和子进程,或者将1到10打印到文件中。并输出哪个处理打印的数字。以下代码交替显示,但编号相同。请帮帮我!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#define MSGSIZE 16
int parent= 1;
int n=-1;
main ()
{
int i;
char *msg = "How are you?";
char inbuff[MSGSIZE];
int p=0;
FILE *fp1,*fp2;
pid_t ret;
ret = fork ();
if (ret > 0)
{
i = 0;
while (i < 10)
{
n++;
// sprintf(msg, "%d", n);
// fp=fopen("abc.txt","a");
// write (p[1], itoa(n,msg,MSGSIZE), MSGSIZE);
// sleep (2);
// fclose(fp);
//read (p[0], inbuff, MSGSIZE);
fp1=fopen("abc.txt","r");
fscanf(fp1,"%d",&n);
fclose(fp1);
fp1=fopen("abc.txt","w");
fprintf(fp1,"%d",n);
printf("Parent: %d\n", n);
i++;
fclose(fp1);
sleep(2);
}
exit(1);
}
else
{
i = 0;
while (i < 10)
{
n++;
//sleep (1);
// read (p[0], inbuff, MSGSIZE);
fp2=fopen("abc.txt","r");
fscanf(fp2,"%d",&n);
fclose(fp2);
fp2=fopen("abc.txt","w");
fprintf(fp2,"%d",n);
printf("Child: %d\n", n);
i++;
sleep(2);
}
}
exit (0);
}
答案 0 :(得分:1)
因为进程不共享内存,所以基本上每个进程的n
都不同。为此,您需要使用inter-process-communication
,Linux提供了几种方法:
http://tldp.org/LDP/lpg/node7.html
通常,您只需要找到一种方法来共享父级和子级进程中n
的值。
注意:对于用户线程,此问题不会出现,因为同一进程上的用户线程共享内存。您只需要同步对它的访问。另外,请注意,因为根据您对进程使用的方法,您可能还需要同步访问权限。
答案 1 :(得分:0)
如果你想改变变量的相同内存位置,那么就不可能,因为两个进程都有不同的地址空间。在线程的情况下你可以实现同样的事情。