文本I/O编程

一、基本I/O操作

  Linux的输入/输出(I/O)操作,平常分为5独面:打开、读取、写副、定位以及倒闭;对应之发生5单系列调用: open()、read()、write()、lseek()、和close()这5只函数,也叫做不牵动缓冲区的I/O操作。程序员可以一贯操作硬件,这样呢开发使等脚的系统采用提供了便民。这多少个函数属于POSIX的同等有的。其原型如下:

 

  

1 #include <sys/types.h>
2 #include <sys/stats.h>
3 #include <fcntl.h>
4 #include <unistd.h>

1 int open(const char *pathname, int flags, mode_t mode);
2 
3 size_t read(int fd, void *buf, size_t nbytes);
4 
5 size_t write(int fd, const void *buf, size_t ntytes);
6 
7 size_t lseek(int fd, off_t offset, int whence);
8 
9 int close(int fd);
1.open()函数

  open()函数原型如下:

  

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

  函数传的参数的意思如下:

  • pathname: 为字符串,表示给打开的文件名称,可以涵盖路径。
  • flags: 为一个依旧多单标志,表示文件打开的点子,常用标志如下表1所著,flags
    参数可以用|举行整合。
  • mode: 被辟文件的存取权限形式。

  函数重返值:成功重临文件描述符,败北重回-1.

       表1 常用 flag 标志

标识符名 含义和作用   
O_RDONLY       只读方式打开   
O_WRONLY 只写方式打开
O_RDWR 读/写方式打开
O_CREAT 如果文件不存在,就创建新的文件
O_EXCL 如果使用O_CREAT时文件存在,则可返回错误消息
O_TRUNC 如果文件已存在,且以只读或只写方式打开,则先全部删除文件中的原有数据
O_APPEND 以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾

 

 

 

 

 

 

 

 2. read()和write()函数

  read()和write()函数原型如下:

1 ssize_t read( int fd, void* buf, size_t count);
2 ssize_t write( int fd, void* buf, size_t count);

 

  函数传的参数含义如下:

  • fd:文件讲述吻合
  • buf: 指定存储器读来数的缓冲区
  • count: 指定读来或写副的字节数

  函数再次回到值:

   倘使发误,那么回回值为-1,同时设定errno变量为错误代码。如若操作成,则赶回实际读入或写副的字节数。

3. close()函数

  当使用完毕文件时好使close()关闭文件,close()会给缓冲区的数据勾勒回磁盘,并释放文件所占有的资源。其函数原型如下:

int close(fd);

 

  函数重返值:成功再次来到回0,失败再次来到-1,并置errno。

二、标准I/O操作

  前边内容所陈述之公文以及I/O读写都是因文件讲述吻合的。这多少个都是骨干的I/O控制,是不带缓冲的。在高层应用中,不带来缓冲的I/O操作往往效用低下。ANSI制定了相同名目繁多基于流缓冲的标准I/O函数,是吻合ANSI的标准I/O处理。

  那一个函数基本还定义在C语言标准库的<stdio.h>头文件中。

1.fopen()函数

  函数原型如下:

FILE* fopen( const char* pathname, const char* type);

 

  下表表达了type的各个取值:

type 字符串

含义
R或rb 打开只读文件,该文件必须存在
R+或r+b 打开可读/可写文件,该文件必须存在
W或wb 打开只写文件,若文件存在,则文件长度清零;否则建立该文件
w+或w+b 打开可读/可写文件,若文件存在,则文件长度清零;否则建立该文件
a或ab 以追加的方式打开可读/可写文件,若文件存在,则写入的数据将附加到文件的尾部,不会修改文件原有的数据;若文件不存在,则建立该文件
a+或a+b 以追加的方式打开只写文件,若文件存在,则写入的数据将附加到文件的尾部,不会修改文件原有的数据;若文件不存在,则建立该文件

 

 

 

 

 

 

2.fclose()函数

  函数原型如下:

int fclose(FILE* fp);

 

  这时缓冲区的数量写入文件中,并释放系统所提供的文本资源。如若只是要将缓冲区的数码写入文件,但为可能后还要用文件指针,不愿意于是时段关闭它,可以行使此外的一个函数fflush(),其函数原型如下:

int fflusn(FILE* fp);

 

3. fread()和fwrite()函数

  fread()和fwrite()函数原型如下:

1 size_t fread(void *ptr, size_t size, size_t nmemb, FILE* stream);
2 
3 size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);

 

  再次回到值:读或摹写的记录数,成功时再次来到的记录数等于nmemb,出错或读到文件结尾时再次回到的记录数小于nmemb,也说不定回到回0。

  fread()和fwrite
用于读/写记录,这里的记录是指同一错固定长度的字节,如一个int、一个结构体或者一个定长数组。参数size提出一漫长记下之长短,而nmemb指出要读来或写多少条记下,这个记录在ptr所依的内存中连存放,共占size*nmemb字节。

  fread()从文本文件stream中读出size*nmemb字节保存到ptr中,而fwrite()把ptr中之size*nmemb字节写及文件stream中。