恐惧造成分段错误

And*_*Dev 0 c fread

尝试创建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;
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 9

open返回文件描述符,而不是FILE *指针.用途fopen:

fp = fopen("/dev/urandom", "r");
Run Code Online (Sandbox Code Playgroud)

旁白:(void *)演员怎么了?它隐藏了你的bug.心理调试告诉我你插入了强制转换来摆脱"赋值从整数没有强制转换的指针"警告,但在这种情况下,这不是正确的修复.当你收到类似的奇怪警告时,你应该检查文档,然后再采取疯狂的演员阵容.

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

除了3:你为什么一开始使用creat()?它的手册页非常明确地说"这个界面已经过时了open(2)".