📅  最后修改于: 2023-12-03 14:41:21.040000             🧑  作者: Mango
在C语言中,fwrite()
和write()
都是用于将指定数据写入文件的函数。它们之间的主要区别在于 fwrite()
是C库函数,而write()
是UNIX系统调用函数。因此,write()
使用起来可能相对更加底层和灵活。
fwrite()
函数用于将指定数据写入指定文件中。该函数的完整原型如下:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
该函数的参数解释如下:
ptr
:待写入数据的地址;size
:待写入数据类型的字节数;nmemb
:待写入数据的个数;stream
:指向FILE类型结构体的文件指针。fwrite()
函数的返回值是成功写入的数据块数。
write()
函数属于UNIX/Linux系的系统调用,在标准C库中不提供该函数。该函数的完整原型如下:
ssize_t write(int fd, const void *buf, size_t count);
该函数的参数解释如下:
fd
:文件描述符;buf
:待写入数据的地址;count
:待写入数据的字节数。write()
函数的返回值是成功写入的数据字节数。
相比fwrite()
函数,write()
函数具有以下特点:
write()
函数属于系统调用,比fwrite()
更加底层和灵活;write()
函数更加适合于直接操作设备,例如socket和管道。而fwrite()
函数会缓冲数据,不适合于对文件进行高度定制的操作。#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "w");
if (fp == NULL) {
perror("fopen");
return 1;
}
char buffer[] = "Hello, world!";
size_t result = fwrite(buffer, sizeof(char), sizeof(buffer), fp);
printf("fwrite() %zu bytes successfully!\n", result);
fclose(fp);
return 0;
}
以上代码打开一个名为 test.txt 的文件,写入了字符串 Hello, world!。并在控制台输出写入成功的字节数。
#include<unistd.h>
int main()
{
int fd = open("test.txt", O_WRONLY | O_CREAT, 0644);
if (fd == -1)
{
perror("open");
return 1;
}
char buffer[] = "Hello, world!";
ssize_t result = write(fd, buffer, sizeof(buffer));
printf("write() %zd bytes successfully!\n", result);
close(fd);
return 0;
}
以上代码也打开了一个名为test.txt的文件,写入了 Hello, world! 字符串。并在控制台输出写入成功的字节数。与fwrite()
相比,需要手动打开文件描述符,但这样可以更加灵活地控制文件写入。