我正在使用open
和make
函数,所以我尝试将1024个字节写入文件
代码是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main(void)
{
int fd;
fd = open("hellow" , O_RDWR);
write(fd , "hello" , 1024);
}
当我使用linux
在gcc
中编译它时编译正常但是当我尝试使用hellow
在终端中打开less
时,我收到此警告:
"hellow" may be a binary file. See it anyway?
当我回答是的时候,我得到了我打算写的一行随机符号的整页。所以我的问题是,是否有人知道是什么原因导致hellow
被视为二进制文件,为什么这些随机字符会在预期的行之后写入。
答案 0 :(得分:6)
为什么这些随机字符会在预定的行之后写出来?
你告诉write()
写入1024个字节,但是你只提供6个(“hello”加上终止零),所以你(很可能)将1018个字节的随机乱码写入你的文件。不仅如此,这会引发未定义的行为。
是什么原因导致
hellow
被视为二进制文件?
less
正在使用启发式方法来确定文件是“文本”还是“二进制”;它正在寻找值超出正常人类可读范围的任何字符。您可以在man page上阅读有关此内容的更多信息(请参阅字符集部分)。