FIFO を使用してサーバーを再現する C プログラムがあります。このプログラムは、入力 FIFO から 2 行 (数値n
と文字列) を読み取り、出力 FIFO行にstr
書き込みます。次のコードを書きました。n
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 の 2 つの入力行が である場合、実行ごと5\nhello
に 1 ~ 25 回の が出力されhello
ます (頻度は完全にランダムに見えます)。
私はこれに2日間立ち往生しています。助けてください。