带/ dev / urandom的FIFO

问题描述 投票:1回答:1

我遇到了问题。试着编写一个有效的简单程序

父进程从/ dev / urandom发送子字节,子进程将它们输出到屏幕(每行十六进制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”,但肯定是相同的一个字节)当我再次运行相同的程序(不重新编译)时,输出似乎没问题......任何想法?

#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;
}
c ubuntu fifo
1个回答
0
投票

正如rodrigo指出的那样,你的指令mkfifoopen("FIFO"...)是向后的,如果你打算使用临时的fifo,你可以简单地使用pipe(2)调用而不是创建和删除fifo。

© www.soinside.com 2019 - 2024. All rights reserved.