0

试图创建一个 1024 字节的随机数据文件。当我运行它时,我在 fread 行上得到一个分段错误错误。有人看到我做错了吗?谢谢!

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

#define PERMS 0666

int main() {

   char buf[1024];

   if (creat("test.txt", PERMS) < 0) {
       fprintf(stderr, "couldn't create file\n");
       exit(0);
   }

   char randomData[1024];
   FILE* fp;
   fp = (void*) open("/dev/urandom", O_RDONLY, PERMS);
   fprintf(stderr, "here\n");
   fread(&randomData, 1024, 1, fp);
   fclose(fp);

   return 0;
}
4

1 回答 1

9

open返回文件描述符,而不是FILE *指针。使用fopen

fp = fopen("/dev/urandom", "r");

旁白:那个(void *)演员是怎么回事?它对你隐藏了错误。心理调试告诉我,您插入了强制转换以摆脱“赋值使指针在没有强制转换的情况下从整数”警告,但在这种情况下,这不是正确的解决方法。当你收到这样的奇怪警告时,你应该在随意插入疯狂演员表之前查看文档。

旁白2:您的程序不会将任何数据写入您的test.txt文件。实际上,无论如何,您都会泄漏您立即创建的文件描述符,因此它目前无法写入任何内容。即使您确实设法写入了您尝试从中读取的 1024 个字节/dev/urandom,它也不会是文本数据,因此该文件扩展名有点奇怪。

旁白3:你为什么首先使用creat()?它的手册页非常清楚地说明“此界面已被废弃open(2)”。

于 2013-03-11T04:55:49.687 回答