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

标签 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);
}

当我在 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/

相关文章:

c++ - vector 值赋值

c++ - 如何将文本文件读入类的 vector

c - malloc 将内存转换为结构

c - 在 C 中以某种方式对某些值更好

c - 如何使用 printf 显示完整编写的程序?

linux - 使用 shell 按照指定模式将多个文本行复制到文件中

linux - 联机帮助页中 Unix 命令名称后括号中的数字是什么意思?

C 二进制读写文件

linux - Linux进程是否仅在定时器中断时调度?

file - 来自 ByteArray/Stream 的 TagLib-sharp 文件