gpt4 book ai didi

c - 从/dev/random读取字节失败

转载 作者:行者123 更新时间:2023-11-30 18:32:28 28 4
gpt4 key购买 nike

我有一段用 POSIX 兼容的 C 语言编写的代码,但它似乎无法正常工作。目标是从/dev/random(Linux/BSD/Darwin 内核随机数生成器的接口(interface))读取数据,并将写入的字节输出到文件中。我不太确定我忽略了什么,因为我确信我已经涵盖了所有方面。无论如何,这就是:

int incinerate(int number, const char * names[]) {
if (number == 0) {
// this shouldn't happen, but if it does, print an error message
fprintf(stderr, "Incinerator: no input files\n");
return 1;
}

// declare some stuff we'll be using
long long lengthOfFile = 0, bytesRead = 0;
int myRandomInteger;

// open the random file block device
int zeroPoint = open("/dev/random", O_RDONLY);

// start looping through and nuking files
for (int i = 1; i < number; i++) {
int filePoint = open(names[i], O_WRONLY);

// get the file size
struct stat st;
stat(names[i], &st);
lengthOfFile = st.st_size;
printf("The size of the file is %llu bytes.\n", lengthOfFile);

while (lengthOfFile != bytesRead) {
read(zeroPoint, &myRandomInteger, sizeof myRandomInteger);
write(filePoint, (const void*) myRandomInteger, sizeof(myRandomInteger));
bytesRead++;
}

close(filePoint);
}

return 0;
}

有什么想法吗?这是在 OS X 上开发的,但我认为它没有理由不能在 Linux 或 FreeBSD 上运行。

如果有帮助,我添加了以下 header :

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>

最佳答案

而不是

write(filePoint, (const void*) myRandomInteger, sizeof(myRandomInteger));

你肯定想写

write(filePoint, (const void*) &myRandomInteger, sizeof(myRandomInteger));

你不是吗?如果您使用从 /dev/random 读取的随机字节作为指针,那么您几乎肯定迟早会遇到段错误。

关于c - 从/dev/random读取字节失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259699/

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