在linux中用C语言将随机数输出到文件

在linux中用C语言将随机数输出到文件,c,linux,file-io,systems-programming,C,Linux,File Io,Systems Programming,我正在尝试使用循环将一个数字(随机生成)写入一个文件,进行一定次数的迭代。我有: while (i++ < number) { n = randno(); write(openFd, (char) n, sizeof(int)); } while(i++

我正在尝试使用循环将一个数字(随机生成)写入一个文件,进行一定次数的迭代。我有:

while (i++ < number) {
   n = randno();
   write(openFd, (char) n, sizeof(int)); 
}
while(i++
代码编译并运行。我可以在屏幕上打印“n”,文件已打开(代码未显示),但当我尝试使用
gedit
打开文件时,文件中似乎没有任何数据。我想要一个有一定长度的一个非常大的数字的文件。我哪里做错了?感谢您的帮助


顺便问一下,什么是真正的随机函数?谢谢。

write()的原型是:

ssize_t write(int fd, const void *buf, size_t count);
请注意,第二个arg是一个指针值,因此在那里传递一个随机数(这是您所做的1)并没有seg fault,这有点令人惊讶

无论如何,如果您要做的是将数字写入文本,则需要先将其放入字符串中:

int n = randno();
char buffer[16]; // Will hold any int value + `\0`
sprintf(buffer, "%d", n);
您现在可以将
缓冲区
写入
一起使用:

write(openFd, buffer, strlen(buffer));


一,
n
是int;用
(char)
强制转换只会截断它。也许你指的是
(char*)&n
,它可以写出数字,但是是二进制的,而不是文本!我想这不是您想要的,因为您在gedit中检查文件。

write()的原型是:

ssize_t write(int fd, const void *buf, size_t count);
请注意,第二个arg是一个指针值,因此在那里传递一个随机数(这是您所做的1)并没有seg fault,这有点令人惊讶

无论如何,如果您要做的是将数字写入文本,则需要先将其放入字符串中:

int n = randno();
char buffer[16]; // Will hold any int value + `\0`
sprintf(buffer, "%d", n);
您现在可以将
缓冲区
写入
一起使用:

write(openFd, buffer, strlen(buffer));


一,
n
是一个整数;用
(char)
强制转换只会截断它。也许你指的是
(char*)&n
,它可以写出数字,但是是二进制的,而不是文本!我想这不是您想要的,因为您在gedit中检查文件。

如果您有文件,也可以使用fprintf*

fprintf(fp, "%d",n);

如果有文件,也可以使用fprintf*

fprintf(fp, "%d",n);

通过将n强制转换为字符类型,您已经创建了一些内容,这些内容将随机写入指向0到255之间的数字的内存。扩展你正在做的事情,你所需要的就是

while (i++ < number) {
   int n;
   n = randno();
   write(openFd, &n, sizeof(int)); 
}
while(i++

运算符将传递一个指向N的指针,而不是N值…

方法是将N强制转换为您创建的字符类型,该字符类型将随机写入指向0到255之间的数字的内存。扩展你正在做的事情,你所需要的就是

while (i++ < number) {
   int n;
   n = randno();
   write(openFd, &n, sizeof(int)); 
}
while(i++

&运算符将传递指向N的指针,而不是N值…

真正的随机函数是输出不可计算的真实随机数的函数

/linux上的dev/random,而不是/dev/urandom


对于您的文件写入,我将使用“fprintf”

真正的随机函数是输出不可计算的真实随机数的函数

/linux上的dev/random,而不是/dev/urandom


对于您的文件写入,我将使用“fprintf”

您的数字必须是多随机?为什么不使用真正的随机函数来实现它呢?您可以简单地将一个数字
n
转换为一个字符。你在课堂上睡觉吗?你能检查一下
write()
函数的返回状态吗。成功时,它应返回写入文件的字节数。这将确认写入文件的内容。这是用C/C++编写的,对吗?你能把这个细节添加到你的Q中让它更明显吗?同时添加适当的标签。这应该是如此,imho。你的数字必须是随机的吗?为什么不使用真正的随机函数来实现它呢?您可以简单地将一个数字
n
转换为一个字符。你在课堂上睡觉吗?你能检查一下
write()
函数的返回状态吗。成功时,它应返回写入文件的字节数。这将确认写入文件的内容。这是用C/C++编写的,对吗?你能把这个细节添加到你的Q中让它更明显吗?同时添加适当的标签。这应该转到SO,imho。