C使用系统调用逐字节写入文件
C write file byte by byte using system call
我想从字符缓冲区逐字节写入文件,我必须使用系统调用 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");
}
}
您不会在任何地方传入或使用缓冲区的长度,因此 write() 调用只会在 valod 缓冲区末尾之后继续访问内存内容,直到 write() 失败(这不太可能很快就会发生)或者你的程序遇到无效内存并死掉(更有可能)。
while (write(fd, buffer+i, 1) == 1)
是一个循环,只要 write
成功,只要 buffer+i
的取消引用(由 write
)不成功,它就会继续 运行不会导致您的程序崩溃。
您需要以某种方式对要写入的数据进行限制,例如:
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");
}
这仍在逐字节写入数据,但具有适当的终止条件。
我想从字符缓冲区逐字节写入文件,我必须使用系统调用 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");
}
}
您不会在任何地方传入或使用缓冲区的长度,因此 write() 调用只会在 valod 缓冲区末尾之后继续访问内存内容,直到 write() 失败(这不太可能很快就会发生)或者你的程序遇到无效内存并死掉(更有可能)。
while (write(fd, buffer+i, 1) == 1)
是一个循环,只要 write
成功,只要 buffer+i
的取消引用(由 write
)不成功,它就会继续 运行不会导致您的程序崩溃。
您需要以某种方式对要写入的数据进行限制,例如:
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");
}
这仍在逐字节写入数据,但具有适当的终止条件。