我有一个使用 FIFO 重现服务器的 C 程序。该程序从输入 FIFO 中读取两行——一个数字n
和一个字符串str
——并写入输出 FIFOn
行,每行都是str
. 我写了以下代码。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#define MAX_SIZE 256
char *readline(int fd, char *buffer) {
char c;
int i = 0;
while (read(fd, &c, 1) != 0) {
if (c == '\n')
break;
buffer[i++] = c;
}
return buffer;
}
int main(int argc, char** argv) {
mkfifo(argv[1], 0666);
mkfifo(argv[2], 0666);
int in = open(argv[1], O_RDONLY);
int out = open(argv[2] ,O_WRONLY);
char line[MAX_SIZE];
memset(line, 0, MAX_SIZE);
int n, i;
while (1) {
strcpy(line, readline(in, line));
sscanf(line, "%d", &n);
strcpy(line, readline(in, line));
for (i = 0; i < n; i++) {
write(out, line, strlen(line));
write(out, "\n", 1);
}
}
close(in);
close(out);
return 0;
}
该程序编译并运行没有错误,但它在每次执行时输出不同数量的字符串。例如,如果输入 FIFO 中的两条输入行是5\nhello
,那么它会在每次运行时打印出 1 到 25 次出现的hello
(频率似乎是完全随机的)。
我已经坚持了两天了。请给我一些帮助。