写入1024字节时,文本文件变成二进制文件(linux)

时间:2013-09-16 22:01:11

标签: c linux file executable

我正在使用openmake函数,所以我尝试将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);
}

当我使用linuxgcc中编译它时编译正常但是当我尝试使用hellow在终端中打开less时,我收到此警告: "hellow" may be a binary file. See it anyway? 当我回答是的时候,我得到了我打算写的一行随机符号的整页。所以我的问题是,是否有人知道是什么原因导致hellow被视为二进制文件,为什么这些随机字符会在预期的行之后写入。

1 个答案:

答案 0 :(得分:6)

  

为什么这些随机字符会在预定的行之后写出来?

你告诉write()写入1024个字节,但是你只提供6个(“hello”加上终止零),所以你(很可能)将1018个字节的随机乱码写入你的文件。不仅如此,这会引发未定义的行为。

  

是什么原因导致hellow被视为二进制文件?

less正在使用启发式方法来确定文件是“文本”还是“二进制”;它正在寻找值超出正常人类可读范围的任何字符。您可以在man page上阅读有关此内容的更多信息(请参阅字符集部分)。