c - C中的管道用法

标签 c arrays pipe

我有一个关于在 C 中使用管道的问题。我想在主进程中有一个多维数组。该数组存储 24 行文本,一行包含 256 个字节(BUFFER)。这是我的代码。

顶部定义的缓冲区大小 = 256 字节

READ_END 定义在 TOP = 0

WRITE END DEFINED ON TOP = 1

            char buffer[BUFFER_SIZE];

            char *read_msg[100];
            char *write_msg[100];

            FILE *fp;
            fp = fopen(argv[1], "r");


            pid_t pid;
            int fd[2];
            pid = fork();

            if (pid < 0) { // error
                fprintf(stderr, "Fork Failed");
                return 1;
            }

            if (pid == 0) { // child process does the time consuming task

                close(fd[WRITE_END]);
                read(fd[READ_END], &read_msg, 24*BUFFER_SIZE);
                close(fd[READ_END]);

                for (int i = 0; i < 24; ++i) {
                    printf("Received string: %s\n", read_msg[i]);
                }

            }

            if (pid > 0) { // parent is responsive immediately
                for (int i = 0; i < 24; ++i) {
                    if (fgets(buffer, sizeof(buffer), fp)) {
                        write_msg[i] = malloc(sizeof(buffer) + 1);
                        strcpy(write_msg[i], buffer);
                    }
                }
                close(fd[READ_END]);
                write(fd[WRITE_END], &write_msg, 24*BUFFER_SIZE);
                close(fd[WRITE_END]);
            }
        }
    }

在子进程中,我想打印这些行,但它什么也没打印。我该如何解决?谢谢...

解决方案

            char buffer[BUFFER_SIZE];

            char read_msg[100][BUFFER_SIZE];
            char write_msg[100][BUFFER_SIZE];

            FILE *fp;
            fp = fopen(argv[1], "r");


            pid_t pid;
            int fd[2];

管道(fd);

            pid = fork();

            if (pid < 0) { // error
                fprintf(stderr, "Fork Failed");
                return 1;
            }

            if (pid == 0) {

                close(fd[WRITE_END]);
                read(fd[READ_END], &read_msg, 24*BUFFER_SIZE);
                close(fd[READ_END]);

                for (int i = 0; i < 24; ++i) {
                    printf(read_msg[i]);
                }


            }

            if (pid > 0) {

                for (int i = 0; i < 24; ++i) {
                    if (fgets(buffer, sizeof(buffer), fp)) {
                        strcpy(write_msg[i], buffer);
                    }
                }
                close(fd[READ_END]);
                write(fd[WRITE_END], &write_msg, 24*BUFFER_SIZE);
                close(fd[WRITE_END]);

            }
        }
    }

最佳答案

我忘了在 fork() 之前写 pipe(fd)。谢谢大家:)

关于c - C中的管道用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40565197/

相关文章:

C:查找函数名称时出现段错误(核心已转储)

c - OpenMP 优化?

c 如何启动一个通过更改信号量值而停止的线程

javascript - 如何根据另一个值 [JavaScript] 在对象数组中搜索特定值?

c - C : Binary files 上的文件操作

JavaScript/AngularJS : How to compare Object element equality in Array?

c - 当初始值设定项多于数组大小时的行为是什么?

javascript - 在 Node.js 中将声音传送到扬声器时的音频漂移

python - Python 中标准输入的多个参数

c++ - 命名管道相对于匿名管道的优势c++