C语言 文件的输入输出

文件的输入输出函数分为两大类
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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值