我对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]);
}
}
}
答案 0 :(得分:0)
我忘了在fork()之前写管道(fd)。谢谢大家:))