fwrite
和
fread
是C语言标准库中的文件I/O操作函数。
fwrite
用于将内存中的数据块写入到文件中,函数原型如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
参数解释:
ptr
:指向内存数据块的指针。
size
:要写入的每个元素的大小。
count
:要写入的元素个数。
stream
:指向FILE类型的文件对象的指针。
返回值:成功时返回写入的元素个数,出错时返回0。
举个例子,下面的代码将数据块写入文件:
char buf[] = "Hello world\n";
FILE *fp = fopen("output.txt", "wb"); // 以二进制写入方式打开文件
if (fp != NULL) {
fwrite(buf, sizeof(char), strlen(buf), fp);
fclose(fp);
fread
用于从文件中读取数据到内存中,函数原型如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
参数解释:
ptr
:指向内存数据块的指针。
size
:要读取的每个元素的大小。
count
:要读取的元素个数。
stream
:指向FILE类型的文件对象的指针。
返回值:成功时返回读取的元素个数,出错或到达文件尾时返回0。
举个例子,下面的代码从文件中读取数据:
char buf[1024];
FILE *fp = fopen("input.txt", "rb"); // 以二进制读取方式打开文件
if (fp != NULL) {
size_t nread = fread(buf, sizeof(char), 1024, fp);
fclose(fp);
printf("Read %lu characters: %s\n", nread, buf);
需要注意的是,fwrite
和fread
这两个函数对于二进制数据是直接进行复制的,对于文本数据则需要考虑编码格式等问题。同时,这两个函数都是阻塞式IO操作,因此在大量数据的读写操作中可能会造成性能问题。