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

相关文章推荐

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

表头文件 #include fread   函数原型 size_t fread( void * ptr,size_t size,size_t nmemb,FILE * stream); fwri...

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

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

不带缓冲区open和带缓冲区的fopen的区别:

open和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满...

open函数和fopen函数的区别

pen和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从...

open与fopen的区别

1.open函数 原型:int open(const char *path, int access,int mode) path    要打开的文件路径和名称    access  访问模式 ...

open/read/write和fopen/fread/fwrite的区别

open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引。 fopen:C语言库函数,返回的是一个指向文件结构的指针。fopen是ANSI C标准中的C语言库函数,在不同的操...
  • wdt3385
  • wdt3385
  • 2012年08月13日 10:27
  • 460

文件篇(一、fopen和open有什么区别? )

open和fopen的区别: 1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内...

open() 和 fopen() 的区别

本文转自:http://hi.baidu.com/stoneboy100200/blog/item/f5f8bc37ecadecbbd0a2d39f.html fopen /open区别 ...

Linux下open与fopen的区别

int open(const char *path, int access,int mode)     path 要打开的文件路径和名称                             ...

open和fopen的区别:

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

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