2012-05-15 67 views
0

我想同步父进程和子进程,或者将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); 
} 

回答

1

这是因为进程不共享内存,所以基本上你n是每个进程不同。为此,您需要使用inter-process-communication,其中Linux提供了几种方法来做到这一点:

http://tldp.org/LDP/lpg/node7.html

一般来说,你只需要找到一种方法来共享的父母和孩子之间的过程中n值。

注意:对于用户线程,不会出现此问题,因为同一进程上的用户线程共享内存。你只需要同步访问它。另外,要小心,因为根据您在进程中使用的方法,您可能还需要同步访问权限。

0

如果你想改变变量的同一个内存位置,那么这是不可能的,因为这两个进程有不同的地址空间。在线程的情况下,你可以达到同样的效果。