我正在玩 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
编译它时它编译正常但是当我尝试在终端中使用 less 打开
,我收到这个警告:
hellow
“hellow”可能是一个二进制文件。还是看到了吗?
当我回答是时,我得到了我打算写的那一行,后面跟着一整页随机符号。所以我的问题是,有谁知道是什么导致 hellow
被认为是二进制文件,以及为什么这些随机字符会写在预期的行之后。
最佳答案
why does those random characters gets written after the intended lines?
您告诉 write()
写入 1024 个字节,但您只提供了 6 个字节(“hello”加上终止零),因此您(很可能)写入了 1018 个字节的随机乱码你的文件。不仅如此,这还会调用未定义的行为。
what causes
hellow
to be considered an a binary file?
less
使用试探法来确定文件是“文本”还是“二进制”;它正在寻找值超出正常人类可读范围的任何字符。您可以在 man page 上阅读更多相关信息(请参阅有关字符集的部分)。
关于c - 向文本文件写入 1024 字节时,文本文件变成二进制文件 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838035/