FIFO与/ dev/urandom

我遇到了问题。试图写一个简单的程序,其中分叉一次FIFO与/ dev/urandom

父进程从/ dev/urandom发送子字节,子进程将它们输出到屏幕(15行,每行十六进制)。问题是:当我第一次打开编译PROGRAMM输出的样子:

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”,但肯定同一个字节) 当我运行同一程序(不重新编译)再次输出似乎是好的...任何想法?

#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;

}

回答:

随着罗德里戈指出,您的指示mkfifoopen("FIFO"...)是倒退,如果你还打算使用一个临时的FIFO,你可以简单地使用pipe(2)调用,而不是创建和删除一个FIFO。

以上是 FIFO与/ dev/urandom 的全部内容, 来源链接: utcz.com/qa/267330.html

回到顶部