open、fopen与freopen

转载 2015年11月18日 15:56:04

Linux(C/C++)下的文件操作open、fopen与freopen

open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲。
linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。
所以在linux下如果需要对设备进行明确的控制,那最好使用底层系统调用(open),

open对应的文件操作有:close, read, write,ioctl 等。
fopen 对应的文件操作有:fclose, fread, fwrite, freopen, fseek, ftell, rewind等。

freopen用于重定向输入输出流的函数,该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。详细见第3部分。

open和fopen的区别:
1,fread是带缓冲的,read不带缓冲.
2,fopen是标准c里定义的,open是POSIX中定义的.
3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别.
4,fopen不能指定要创建文件的权限.open可以指定权限.
5,fopen返回文件指针,open返回文件描述符(整数).

6,linux/unix中任何设备都是文件,都可以用open,read.

1、open系统调用(linux)
需要包含头文件:#include

返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 。

2、fopen库函数
头文件:

返回值:实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误,从ferror和feof获取错误信息或检测是否到达文件结尾.

fwrite:向文件写入一个数据块
函数原型:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
参数:
buffer:是一个指针,对fwrite来说,是要获取数据的地址;
size:要写入内容的单字节数;
count:要进行写入size字节的数据项的个数;
stream:目标文件指针;

返回值:返回实际写入的数据块数目

fflush:把文件流里的所有为写出数据立刻写出。

函数原型:int fflush(FILE *stream);

fseek:是lseek系统调用对应的文件流函数。它在文件流里为下一次读写操作指定位置。
函数原型:int fseek(FILE *stream, long offset, int fromwhere);
参数stream为文件指针
参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
参数fromwhere设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.

返回值:如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。

以下为linux下一个打开文件并显示文件内容的程序:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片

include

include

include

include

include

include

include

freopen和fopen的在ACM竞赛中的简单使用

在程序设计竞赛中,当我们遇到需要大量的输入数据情况下就可以采用文件的方式来存储我们的输入数据,为下次调试程序时节省了很多时间; 首先我们来说下freopen()这个函数, 1.它是c标准库...
  • xu_fish
  • xu_fish
  • 2015年12月15日 20:21
  • 1380

freopen和fopen的在ACM竞赛中的简单使用

在程序设计竞赛中,当我们遇到需要大量的输入数据情况下就可以采用文件的方式来存储我们的输入数据,为下次调试程序时节省了很多时间; 首先我们来说下freopen()这个函数, 1.它是c标准库...
  • xu_fish
  • xu_fish
  • 2015年12月15日 20:21
  • 1380

ACM必学]文件输入输出技巧:freopen这样用也行

在源程序的存放位置新建一个文本文档,命名为p3.in(其他的如.txt也行),那么我们在调试运行程序时就不用每次都很麻烦的输入一大堆的数据,然后结果却不正确,浪费了很多的时间! freopen可...
  • u013480600
  • u013480600
  • 2014年01月16日 22:13
  • 1576

open函数和fopen函数的区别

open函数和fopen函数的区别 open函数和fopen函数的区别,有需要的朋友可以参考下。 pen和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特...
  • a746742897
  • a746742897
  • 2016年09月02日 13:22
  • 1923

Linux(C/C++)下的文件操作open、fopen与freopen

Linux(C/C++)下的文件操作open、fopen与freopen open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入...
  • weiyuefei
  • weiyuefei
  • 2017年04月20日 13:56
  • 437

Linux(C/C++)下的文件操作open、fopen与freopen

Linux(C/C++)下的文件操作open、fopen与freopen open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓...
  • qq_38374864
  • qq_38374864
  • 2017年06月07日 21:03
  • 140

APUE之标准I/O fopen,freopen,fread,fwrite实例。

表头文件 #include fread   函数原型 size_t fread( void * ptr,size_t size,size_t nmemb,FILE * stream); fwri...
  • u010944778
  • u010944778
  • 2014年12月26日 09:15
  • 404

C语言中open与fopen的区别

int open(const char *path, int access,int mode)     path 要打开的文件路径和名称                              ...
  • az44yao
  • az44yao
  • 2015年04月14日 15:29
  • 4175

fopen()和open函数的区别

1.系统调用文件I/O     open() create() read()  write() lseek() access()  fcntl() 等函数为系统调用实现的 2.C库函数文件I/O   ...
  • w20101310
  • w20101310
  • 2013年12月06日 23:21
  • 1230

open和fopen的区别

open和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存...
  • angle_birds
  • angle_birds
  • 2013年04月02日 15:24
  • 794
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:open、fopen与freopen
举报原因:
原因补充:

(最多只允许输入30个字)