fread(),fwrite() 读/写流

C 库函数 - fread()

描述

C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。

声明

下面是 fread() 函数的声明。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
  • size -- 这是要读取的每个元素的大小,以字节为单位。
  • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值

成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

实例

下面的实例演示了 fread() 函数的用法。

#include <stdio.h>
#include <string.h>

int main()
{
   FILE *fp;
   char c[] = "This is new world";
   char buffer[20];

   /* 打开文件用于读写 */
   fp = fopen("file.txt", "w+");

   /* 写入数据到文件 */
   fwrite(c, strlen(c) + 1, 1, fp);

   /* 查找文件的开头 */
   fseek(fp, SEEK_SET, 0);

   /* 读取并显示数据 */
   fread(buffer, strlen(c)+1, 1, fp);
   printf("%s\n", buffer);
   fclose(fp);

   return(0);
}

让我们编译并运行上面的程序,这将创建一个文件 file.txt,然后写入内容 this is w3cschool。接下来我们使用 fseek() 函数来重置写指针到文件的开头,文件内容如下所示:

This is new world

C 库函数 - fwrite()

描述

C 库函数 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)ptr 所指向的数组中的数据写入到给定流 stream 中。

声明

下面是 fwrite() 函数的声明。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr -- 这是指向要被写入的元素数组的指针。
  • size -- 这是要被写入的每个元素的大小,以字节为单位。
  • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

返回值

如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象时一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

实例

下面的实例演示了 fwrite() 函数的用法。

#include<stdio.h>

int main ()
{
   FILE *fp;
   char str[] = "This is new world.cc";

   fp = fopen( "file.txt" , "w" );
   fwrite(str , 1 , sizeof(str) , fp );

   fclose(fp);

   return(0);
}

让我们编译并运行上面的程序,这将创建一个文件 file.txt,它的内容如下:

This is new world.cc

现在让我们使用下面的程序查看上面文件的内容:

#include <stdio.h>

int main ()
{
   FILE *fp;
   int c;

   fp = fopen("file.txt","r");
   while(1)
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
          break ;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);
}
 
时间: 2024-12-15 11:55:36

fread(),fwrite() 读/写流的相关文章

node中的可读流和可写流

javascript的一个不足之处是不能处理二进制数据,于是node中引入了Buffer类型.这个类型以一个字节(即8位)为单位,给数据分配存储空间.它的使用类似于Array,但是与Array又有不同:Buffer在定义的时候必须明确知道其长度,但是Array的长度是可以动态变化的.定义Buffer有三种方式: 1. var buf = new Buffer(3);//指定buffer占用3个字节 2. var buf = new Buffer("hello","utf-8&

Linux read/write fread/fwrite两者区别

Linux read/write fread/fwrite两者区别 1,fread是带缓冲的,read不带缓冲. 2,fopen是标准c里定义的,open是POSIX中定义的. 3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别. 4,fopen不能指定要创建文件的权限.open可以指定权限. 5,fopen返回指针,open返回文件描述符(整数). 6,linux/unix中任何设备都是文件,都可以用open,read. 如果文件的大小是8k. 你如果用r

那些年,坑死自己的事之fread/fwrite

今天继续看牛人做过的东西,这个小程序并不大,加上相当多的注释行,才5000多行.这个小程序是在linux下实现的,之前自己也一直用vi来看并加以更加详细的注释,但是效率实在太低.于是将其转移到windows下决定改造到VS2012下运行. 这是一段纯C的代码,新建的工程是C++的,而代码中使用了强制类型转换将一个结构体类型转换成了另一个结构体.于是编译的时候报错不能通过.最后,我新建了空工程,将其以已存在的文件的形式导入,解决了这个问题.修改了一些问题之后,终于不报错,可以运行了.可是真正悲催的

fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结

转载自:http://blog.csdn.net/xidianzhimeng/article/details/23541289 1 fopen 函数原型:FILE * fopen(const char * path,const char * mode); 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno 中. fopen_s,_wfopen_s安全性上相对于fopen有所增强,如果成功则返回0,失败则返回响应的错误代码 errno_

fread/fwrite实现复制功能

1.  fread/fwrite实现复制功能 #include <stdio.h> #include <stdlib.h> #define BUFFSIZE 4096 //执行: ./a.out file1 file2 //功能: 将file1的内容读取出来,写入file2,即复制 int main(int argc,char *argv[]) { char buffer[BUFFSIZE]; FILE *pRead,*pWrite; //读文件指针 写文件指针 int n; //

java并发读&写文件

最近在看Brian Goetz 的<<Java并发实战>>,这本书有两个版本,电子工业出版社的译本很糟糕,建议使用机械工业出版社出版出版的书籍. 在看到第三四章的时候突然想到了多线程读写文件,同时遇到一些书中没有的问题 1, 如何保证组合对象的安全性? 2, 如何判断不变性的约束条件 3, 如何不通过synchronized关键字和锁进行同步处理? 下面是一段代码, 用来从source 读取数据,通过多线程写入target文件中 思路: 1, 如何read/write文件? 2,

[Linux]read/write和fread/fwrite有什么区别

转自:http://blog.csdn.net/xiaofei0859/article/details/51145051 二者都是对文件进行操作,那么二者有什么区别,用的时候该如何选择呢? 1. 区别 fread是带缓冲的,read不带缓冲. fopen是标准c里定义的,open是POSIX中定义的. fread可以读一个结构.read在Linux/unix中读二进制与普通文件没有区别. fopen不能指定要创建文件的权限.open可以指定权限. fopen返回指针,open返回文件描述符(整数

C?#? ?读?写?S?Q?L?数?据?库?I?m?a?g?e?字?段

数据库的Image字段保存的是字节,所以写入数据库Image字段和从数据库Image字段读取的内容都应该为字节. 1.数据库Image字段读写文件      写文件:写文件的过程为将文件以流文件形式打开并将内容读取到一个byte数组,然后将此byte数组写入数据库的Image字段. 源码:     FileInfo finfo=new FileInfo("文件名");   //绝对路径 if(finfo.Exists) {         SqlConnection conn=new 

java读/写文件

读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/BanketBoy/article/details/86504704 https://www.cnblogs.com/chenpi/p/5498731.html 1 package text; 2 3 import java.io.BufferedReader; 4 import java.io.Bu