学习Linux C编程之文件操作

1)fopen函数

fopen函数类似于系统调用中的open函数。和open一样,它返回文件的标识符,只是这里叫做流(stream),在库函数里实现为一个指向文件的指针。如果需要对设备的行为进行明确的控制,最好使用底层系统调用,因为这可以避免使用库函数带来的一些非预期的副作用,如输入/输出缓冲。

函数原型:

#include<stdio.h>

FILE *fopen(const char *filename, const char *mode);
 
 
  • 1
  • 2
  • 3

2)fread/fwrite函数

fread函数从文件流中读取数据,对应于系统调用中的read;fwrite函数从文件流中写数据,对应于系统调用中的write

函数原型:

#include<stdio.h>

size_t  fread(void *ptr, size_t size, size_t nitems, FILE *stream);
 
 
  • 1
  • 2
  • 3

参数说明: 
*ptr要读取数据的缓冲区,也就是要存放读取数据的地方。 
size:指定每个数据记录的长度。 
nitems: 计数,给出要传输的记录个数。 
返回值:成功读取到数据缓冲区的记录个数,当到达文件尾时,他的返回值可能会消耗与nitems,甚至可以是0。

3)fclose函数

fclose函数关闭指定的文件流stream,这个操作会使所有未写出的数据都写出。因为stdio库函数会对数据进行缓冲,所有调用fclose函数是很重要的。如果程序需要确保数据已经全部写出,就应该调用fclose函数。虽然程序正常结束时,也会自动的调用fclose函数,但这样就不能检测出调用fclose所产生的错误了。

函数原型如下:

#include<stdio,h>

int fclose(FILE *stream);
 
 
  • 1
  • 2
  • 3

4)fflush函数

fflush函数的作用是把文件流中所有未写出的数据全部写出。 处于效率考虑,在使用库函数的时候会使用数据缓冲区,当缓冲区满的时候才进行写操作。使用fflush函数可以将缓冲区的数据全部写出,而不关心缓冲区是否满。fclose的执行隐含调用了fflush函数,所以不必再fclose执行之前调用fflush。 
函数原型:

#include<stdio.h>

int fflush(FILE *stream);
 
 
  • 1
  • 2
  • 3

8.write 
write,就是把缓冲区的数据写入文件中。注意,这里的文件时广泛意义的文件,比如写入磁盘、写入打印机等等。 
Linux中write()的函数原型:

size_t write(int fildes, const void *buf, size_t nbytes);
 
 
  • 1

参数说明: 
fildes:文件描述符,标识了要写入的目标文件。例如:fildes的值为1,就像标准输出写数据,也就是在显示屏上显示数据;如果为2 ,则想标注错误写数据。 
*buf:待写入的文件,是一个字符串指针。 
nbytes:要写入的字符数。 
函数返回值:size_t 返回成功写入文件的字符数。需要指出的是,write可能会报告说他写入的字节比你所要求的少。这并不一定是个错误。在程序中,你需要检查error已发现错误,然后再次调用write写入剩余的数据。

9.read

系统调用read是从文件中读出数据。要读取的文件用文件描述符标识,数据读入一个事先定义好的缓冲区。他返回实际读入的字节数。 
Linux中read的函数原型:

size_t read(int fildes, void *buf, size_t nbytes);
 
 
  • 1

参数说明: 
fildes:文件描述符,标识要读取的文件。如果为0,则从标准输入读数据。类似于scanf()的功能。 
*buf:缓冲区,用来存储读入的数据。 
nbytes:要读取的字符数。 
返回值:size_t返回成功读取的字符数,它可能会小于请求的字节数。

10.open

系统调用open的作用是打开一个文件,并返回这个文件的描述符。简单地说,open建立了一条到文件或设备的访问路径。如果操作成功,它将返回一个文件描述符,read和write等系统调用使用该文件描述符对文件或设备进行操作。这个文件描述符是唯一的,他不会和任何其他运行中的进程共享。如果两个程序同时打开一个文件,会得到两个不同的问价描述符。如果同时对两个文件进行操作,他们各自操作,互补影响,彼此相互覆盖(后写入的覆盖先写入的)为了防止文件按读写冲突,可以使用文件锁的功能。这不是本次重点,以后介绍。 
Linux中open的函数原型有两个:

int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode );
 
 
  • 1
  • 2

参数说明。 
path:准备打开的文件或设备名字。 
oflags:指出要打开文件的访问模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值