管道使用情况

时间:2016-11-12 16:47:41

标签: c arrays pipe

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

BUFFER SIZE定义在TOP = 256 BYTE

READ_END定义在TOP = 0

WRITE END定义在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]);

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

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

相关问题