gpt4 book ai didi

c - 尝试对文件求和并通过管道/叉/进程传输时出错?

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:54 27 4
gpt4 key购买 nike

我试图在这个程序中将信息从子进程传递到父进程。这是到目前为止的代码,仍在清理它:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

main() {

char *s, buf[1024];
int fds[2];
int sum;
s = "Hello world!\n";
FILE *file;
pipe(fds);

if(fork()==0){
printf("child process: \n");
int c;
int number;
sum = 0;

file = fopen("file1.dat", "r");
if (file) {
while ((c = getc(file)) != EOF){
sum+=c;
printf("child process: step 1");
fclose(file);
}
}

write(fds[1],&sum,12);
exit(0);
}
read(fds[0],buf,12);
write(1,buf,strlen(s));

}

它编译正确且没有错误,但是当我运行它时返回数字 6 后跟一堆无法识别的字符(问号)。

我可能会遗漏什么?我的感官通过阅读告诉我一些事情。

编辑:我应该补充一点,我的目的是让子进程打开并读取文件(其中包含多行数字)并将它们相加,然后将总数返回给父进程。

最佳答案

假设 sizeof(int) == 4,您写入了 12 个任意字节(其中 4 个表示 sumint 值 -其他 8 个字节给出未定义的行为,因为它们不是作为 sum) 的“同一数组”的一部分)放到管道上,然后您将它们读入 buf。然后您尝试使用 write() 将任意字节打印到标准输出。

您不检查任何错误;你应该。

您确实需要将字节转换回 ASCII 数字流才能理解值。你应该使用write(fds[1], &sum, sizeof(sum))来写,而read(fds[0], &sum, sizeof(sum))来读取,然后您可以使用 printf("%d\n", sum); 进行打印。或者您可以自己进行转换并仍然使用 write() 打印转换后的字符串。或者您可以将 sum 转换为子级中的一串数字。或者……

关于c - 尝试对文件求和并通过管道/叉/进程传输时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097494/

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