C 使用系统调用逐字节写入文件

标签 c unix

我想从字符缓冲区逐字节写入文件,并且必须使用系统调用 write() 来完成此任务。我的代码设置如下所示,但它打印文件并添加垃圾。我做错了什么?

void writeFile(char *fileName) {
    int fd;
    int i = 0;

    if ((fd = open(fileName, O_CREAT|O_WRONLY, 0777)) >= 0) {

        while (write(fd, buffer+i, 1) == 1)
            i++;

        printf("Success\n");
    }
}

最佳答案

while (write(fd, buffer+i, 1) == 1)

是一个循环,只要 write 成功,并且只要 buffer+i 取消引用(通过 write code>) 不会导致您的程序崩溃。

您需要以某种方式对要写入的数据进行限制,例如:

void writeFile(char *fileName, char *buffer, size_t sz) {
    int fd;
    size_t i = 0;

    if ((fd = open (fileName, O_CREAT|O_WRONLY, 0777)) < 0)
        return;

    while (i < sz) {
        if (write (fd, buffer+i, 1) != 1) {
            close (fd);
            return;
        }
        i++;
    }

    close (fd);
    printf("Success\n");
}

这仍然是逐字节写入数据,但具有适当的终止条件。

关于C 使用系统调用逐字节写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291179/

相关文章:

c - 如何使用指向结构的指针进行迭代?

c - c中执行错误: "Segmentation fault (core dumped)"

C - 不回显 system() 命令

c++ - 如何将 stderr 和 stdout 组合成单个 C++ 字符串?

c - 类函数宏中的交换函数

c - 链表插入函数 - 通过指针传递列表

c# - 为什么 C 代码在 C# 中实现为 DLL 时速度较慢

unix - cron 作业每分钟运行一次,从半小时开始

ruby - 如何在 Ruby 中打开进程的 STDIN?

父进程与操作系统之间的通信