問題が発生しました。一度フォークする単純なプログラムを書こうとすると/dev/urandomを持つFIFO
親プロセスは/ dev/urandomから子バイトを送信し、子はそれらをスクリーンに出力します(1行につき15バイトで15バイト)。問題は次のとおりです。
B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0:私が最初にコンパイルプログラムの開発を開いたときの出力は次のようになりますB0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 ... B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0
(常にではない "B0"、しかし確実に同じONEバイト) 私は、同じプログラム(再コンパイルされていない)を実行すると、もう一度出力がOKと思われる...任意のアイデア?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
int main(int argc, char *argv[])
{
char bufforek[256];
printf("P1: READING /dev/urandom\n");
FILE *file_ptr = fopen("/dev/urandom", "r");
int file=open("FIFO",O_RDWR);
mkfifo("FIFO",0666);
char pomoc;
int hexa;
int i=1;
if(fork()==0)
{
char bufforek1[256];
while(read(file,bufforek1,sizeof(bufforek1)))
{
pomoc = *bufforek1;
// printf("%hhX ", pom);
hexa = (int)pomoc;
pomoc = *bufforek1;
printf("%hhX ", pomoc);
if(i==15)
{
printf("\n");
i=1;
}
else i++;
// write(pipe_table[1],bufforek,sizeof(bufforek));
}
return 0;
}
while ((fgets(bufforek, sizeof(bufforek), file_ptr))!=NULL) write(file, bufforek, sizeof(bufforek));
unlink("FIFO");
return 0;
}
いくつかの問題...なぜあなたはそれを開いた後、FIFO mkfifo()を作成していますか?そしてあなたはそれぞれのfdsから読み取られたバイト数をチェックしていません... – rodrigo