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; 
} 
回答:
随着罗德里戈指出,您的指示mkfifo和open("FIFO"...)是倒退,如果你还打算使用一个临时的FIFO,你可以简单地使用pipe(2)调用,而不是创建和删除一个FIFO。
以上是 FIFO与/ dev/urandom 的全部内容, 来源链接: utcz.com/qa/267330.html

