您的位置:首页 > 编程语言 > C语言/C++

C语言 文件的输入输出

2014-02-07 12:00 295 查看
文件的输入输出函数分为两大类

1.有缓冲区的输入输出(Buffered I/O) 数据先写到缓冲区,满了再写入文件

2.无缓冲区的输入输出(Unbuffered file I/O) 直接操作文件

有缓冲区的输入输出函数,含于stdio.h

fopen() 打开一个文件

fclose() 关闭一个文件

putc() 输出一个字符到文件,宏定义

getc() 从文件读取一个字符,宏定义

fgetc() 输出一个字符到文件

fputc() 从文件读取一个字符

fgets() 获取一串字符

fputs() 输出一串字符

fprintf() 输出数据至文件

fscanf() 读取数据

feof() 测试是否到了文件结束

ferror() 测试文件操作是否正常

fseed() 设置准备读取文件数据的位置

rewind() 将准备读取文件数据位置,设置在起始位置

remove() 文件的删除

fopen()

定义函数 FILE * fopen(const char * path,const char * mode);

函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串:

r 打开只读文件,该文件必须存在。

r+ 打开可读写的文件,该文件必须存在。

w 打开只写文件,若存在则覆盖,若不存在则建立。

w+ 打开可读写文件,若存在则覆盖。若不存在则建立。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,则附加。

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,则附加。

b 字符打开为二进制文件。rb、w+b或ab+等组合,

文件顺利打开后,返回文件指针。打开失败则返回NULL,并把错误代码存在error 中,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

fclose() 关闭文件成功返回0

关闭前会将缓冲区数据写入文件,否则缓冲区数据丢失。

一个C语言程序,同一时间打开文件一般不超过20个

putc() 执行成功返回字符值,失败返回EOF

getc() 执行成功返回读取字符,结尾处返回EOF 再stdio.h内,此值是-1

feof() 读取位置在末端返回非零

ferror() 前一个对文件的操作有错误则返回非零,否则返回0 主要供设计系统程序的人员使用

fwrite(void *buffer,int num_byte,int count,FILE *fp);

数据缓冲区,读取的文件字节数,多少写入的数据,文件指针

将某个数据缓冲区内容写入文件

fread()读入缓冲区,参数与fwrite相同

fseek(FILE *fp,long num_byte,int origin) 设置读取位置

文件指针,相对位置,相对位置方式

origin格式 0开头 1当前位置 2文件末端

缺省的文件指针

stdin 标准输入设备键盘

stdout 标准输出设备屏幕

stderr 标准错误输出设备屏幕

stdaux 标准协设备串口

stdprn 标准打印设备打印机

————————————————————————————————————

无缓冲区的输入输出函数,含于fcntl.h unix系统内规定的函数

int _open(char *filename,int mode,int access)

mode:

_O_APPEND
文件指针指向结尾

_O_CREAT
产生供写入的文件

_O_RDONLY
产生只读文件

_0_RDWR
产生可读写文件

_0_TRUNC
打开并设置已存在文件为空白

_O_WRONLY
打开只写文件

_O_BINARY
以二进制方式打开文件

_O_TEXT
以文本方式打开文件

access: 存取方式,可忽略,若加必须包含sys\types.h 和sys\stat.h可同时打开用'|'隔开

_S_IWRITE
写入许可

_S_IREAD
读取许可

打开成功返回整数,称为文件句柄(file handle) 打开失败返回-1

int _close(文件句柄) 成功返回0 失败返回-1

int _read(int fd,void *buf,int size); buf存储读取的数据,size表示要读取字符数,成功返回所读取字符数量,失败返回-1

int _write(int fd,void *buf,int size) 将缓冲区数据写入文件

int _lseek(int fd,long num_byte,int origin); num_byte所要读取与origin的相对位置

origin: SEEK_SET 起始位置 SEEK_CUR 当前位置 SEEK_END 末端位置

缺省文件句柄

0 标准输入设备键盘

1 标准输出设备屏幕

2 标准错误输出设备屏幕

3 标准协设备串口

4 标准打印设备打印机

缺省文件句柄使用前要设置句柄类型

_setmode(文件句柄,mode)

mode: _O_BINAY 二进制文件 _O_TEXT 文本文件

C语言中open函数

作用:打开和创建文件。

简述:

1

2

3

4

#include <fcntl.h>

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

返回值:成功则返回文件描述符,否则返回 -1

对于open函数来说,第三个参数仅当创建新文件时(即 使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的POSIX路径名(如/home/user/a.cpp);flags 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于fcntl.h)通过逻辑位或逻辑构成。

1.O_RDONLY 只读模式

2.O_WRONLY 只写模式

3.O_RDWR 读写模式

打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:

1.O_APPEND 每次写操作都写入文件的末尾

2.O_CREAT 如果指定文件不存在,则创建这个文件

3.O_EXCL 如果要创建的文件已存在,则返回 -1,并且修改 errno 的值

4.O_TRUNC 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0)

5.O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。

6.O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O

设置为非阻塞模式

(nonblocking mode)

以下三个常量同样是选用的,它们用于同步输入输出

1.O_DSYNC 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的

前提下,不等待文件属性更新。

1.O_RSYNCread等待所有写入同一区域的写操作完成后再进行

2.O_SYNC 等待物理 I/O 结束后再write,包括更新文件属性的 I/O

open返回的文件描述符一定是最小的未被使用的描述符。

如果 NAME_MAX(文件名最大长度,不包括'\0')是 14,而我们想在当前目录下创建文件名长度超过 14 字节的文件,早期的 System V 系统(如 SVR2)会截断超出部分,只保留前 14 个字节;而由 BSD 衍生的(BSD-derived)系统会返回错误信息,并且把 errno 置为 ENAMETOOLONG。

POSIX.1 引入常量 _POSIX_NO_TRUNC 用于决定是否截断长文件名/长路径名。如果_POSIX_NO_TRUNC 设定为禁止截断,并且路径名长度超过 PATH_MAX(包括 '\0'),或者组成路径名的任意文件名长度超过 NAME_MAX,则返回错误信息,并且把 errno 置为 ENAMETOOLONG。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: