gpt4 book ai didi

c - 复制文本文件并将其粘贴到新文件 C 时遇到问题

转载 作者:行者123 更新时间:2023-11-30 14:48:42 24 4
gpt4 key购买 nike

我在学校作业上遇到了麻烦,目前该代码适用于 child 获取文本并将其放入新的文本文件。除父级外,文件创建成功但为空。

我的文本文件如下所示

1 text to be copied to child1.

0 text to be copied to parent

我的代码如下

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;
}

感谢帮助。

最佳答案

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

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

您可以在fork()之后打开文件进行读取;至少,这可能是避免麻烦的最简单方法。或者,进程可以在读取之前倒回。对于一个人来说,这将是一个空操作,但对于另一个人来说,这会产生影响。在这种情况下,您还可以在 fork 之前进行读取,这会用数据填充 fp1 的缓冲区,并且两个进程都会看到读取的内容。不过,这可能算作弊。

关于c - 复制文本文件并将其粘贴到新文件 C 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50226095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com