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

时间:2015-02-03 04:04:54

标签: c unix

我想逐字节地从char缓冲区写入文件,我必须使用系统调用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");
    }
}

2 个答案:

答案 0 :(得分:1)

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

是一个循环,只要write成功,只要取消引用buffer+iwrite}并不会导致您的程序,它就会继续运行崩溃。

您需要以某种方式对要编写的数据设置限制,例如:

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");
}

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

答案 1 :(得分:0)

你没有在任何地方传入或使用缓冲区的长度,所以write()调用只是继续访问内存内容,远远超过valod缓冲区的末尾,直到write()失败(这不太可能很快发生)或者你的程序遇到无效的内存而死(更有可能)。