无法复制文本文件并将其粘贴到新文件C中

时间:2018-05-08 04:56:55

标签: c unix

我在分配学校时遇到了麻烦,目前代码适用于将孩子获取并将文本添加到新文本文件中。 除了父文件,文件已成功创建,但文件为空。

我的文本文件看起来像这样

  

要复制到child1的1个文本。

     
    

0要复制到父级的文本

  

我的代码在

之下
int main(){
    int c1,c2,c3 ;
    FILE *fp1,*fpm, *fp2;
    char str1[100];
    char str2[100];
    fp1 = fopen("test.txt","r");
    fpm = fopen("mainlog.txt","w");
    fp2 = fopen("child1log.txt","w");

    c1 = fork();
    if(c1 == 0){
        printf("child Process\n");
        while ((fgets(str1,80,fp1))!=NULL){
            if(str1[0]=='1'){
                fputs(str1+1,fp2);
            }
        }
    }
    else{
        printf("This is parent Process\n");
        while ((fgets(str,80,fp1))!=NULL){
            if(str[0]=='0'){
                fputs(str+1,fpm);
            }
        }
    }

    return 0;
}

帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

底层fp1的打开文件描述符指向打开的文件描述(是的 - 这是POSIX术语;请参阅open())。在fork()之后,每个进程都有自己的文件打开文件描述符,但它们共享打开的文件描述。读取位置是打开文件描述的属性。

因此,两个进程中的一个进程首先读取,并且它也移动另一个进程的读指针。由于第一个进程读取文件中的所有数据,因此第二个进程立即获得EOF。

您可以在fork()之后打开文件进行阅读;至少,这可能是避免麻烦的最简单方法。或者,这些过程可以在阅读之前回放。首先,这将是一个无操作,但对另一个,它将有所作为。在这种情况下,您也可以在fork之前读取,它将使用数据填充fp1的缓冲区,并且两个进程都将看到读取的内容。但这可能算作作弊。