gpt4 book ai didi

c - 带/dev/urandom 的 FIFO

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:40 25 4
gpt4 key购买 nike

我遇到了一个问题。尝试编写一个 fork 一次的简单程序

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

B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0B0 B0 B0 B0 B0 B0 B0 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;
}

最佳答案

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

关于c - 带/dev/urandom 的 FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com