当试图汇总文件并通过管道/fork/进程传输时出错



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

#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("%dn", sum);来打印。或者您可以自己进行转换,但仍然使用write()打印转换后的字符串。或者您可以将sum转换为子对象中的数字字符串。还是…

相关内容

  • 没有找到相关文章

最新更新