使用系统调用在 C 中复制文件并将其转换为二进制文件

标签 c binaryfiles

我目前正在开发一个程序,该程序必须使用系统调用(open()、write()、read() 等...)将任何文件复制到二进制文件中。这是到目前为止的情况。

void copyFileToFD(int destinationFD, int sourceFD){
    unsigned char b[64];
    int amountRead = -1;
    while((amountRead = read(sourceFD, &b, 64)) > 0){
        int written = write(destinationFD, &b, amountRead);
    }
}

我现在遇到的问题是文本文件。

假设一个文件有这样的文本:

This is some text 12345678

我当前的输出文件显示

This is some text 12345678

我想要的输出文件()

ABCD EF00 0000 0000 0000 0000...

如何更改我的代码以便所有文件都将作为二进制文件复制

我知道 fread() 和 fwrite() 但想知道如何通过系统调用来完成。

感谢您的帮助。

最佳答案

您似乎想将输入转换为十六进制文本输出。您可以使用 printf() 来完成:

void copyFileToFD(int destinationFD, int sourceFD){
    unsigned char ch;
    ssize_t amountRead = -1;
    while((amountRead = read(sourceFD, &ch, sizeof(ch))) > 0){
        dprintf(destinationFD, "%.2x ", ch);
    }
}

关于使用系统调用在 C 中复制文件并将其转换为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094846/

相关文章:

C++ - 将 double 序列化为小端二进制文件

java - java中的二进制文件

c++ - 二进制文件写入后读取负整数

c# - 使用 System.IO.BinaryWriter 写入字符串与字符数组的区别

c++ - 格式化标志检查的简洁方法

c++ - "seekp"和 "seekg"可以互换吗?

c - 短路算子评估顺序

c - 需要在 C 中自动换行

c++ - 如何在 C++ 中实现无操作宏(或模板)?

c - 从文件加载到链表