0

我正在使用openandmake函数,所以我尝试将 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被认为是二进制文件,以及为什么这些随机字符会写在预期的行之后。

4

1 回答 1

6

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

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

什么原因hellow被认为是二进制文件?

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

于 2013-09-16T22:02:55.817 回答