文件操作

Linux文件编程

Linux系统调用及用户编程接口(API

系统调用:操作系统提供给用户的一组“特殊”接口,用户程序通过这组“特殊”接口来获得操作系统内核提供的服务

 

为什么用户进程不能直接访问操作系统内核提供的服务?  为了保护内核

       

用户进程在通常情况下不允许访问内核数据,也无法使用内核数据

系统调用仅是一个软中断机制向内核提供请求,以获取内核服务的接口,在实际使用中程序员调用的通常是用户编程接口——API

 

linux文件分为:普通文件,目录文件,链接文件,设备文件

 

文件描述符是一个非负整数,它是一个索引值

一个进程启动,都会打开三个文件:标准输入,标准输出,标准出错处理

所以文件描述符一般从3开始,往上递增

 

创建:int creat(char *filename,mode_t mode)

实际中已不常用

 

打开:open(*filename,flags,mode)

打开或创建文件

成功则返回新分配的文件标识符

出错则返回-1并配置errno

 

当操作完系统后,需关闭文件

 int close(int fd);

 

写:int write(int fd,const void *buf,size_t length)

 length个字节从buf指向的缓冲区中写到fd指向的文件中,返回值为实际写入的字节数

 

定位:int lseek(fd,offset,whence)

文件读写指针相对whence移动offset个字节

操作成功,返回文件指针相对文件头的位置

offset可取负值,表示向前移动

 

读:int read(int fd,const *void buf,size_t length)

fd所指的文件中读取length个字节到buf所指的缓冲区

返回值为读取的字节数  遇到EOF就结束

 

如果出错:

printf(‘errno:%d ’,errno);

strerror(errno); errno的值翻译出来,所以perror结合了printf,strerror

perror(“xxx”); xx输出,后面接失败原因



C库文件

操作独立于操作平台的

标准I/O库是带缓存的I/O

标准I/O提供缓存的目的是减少调用readwrite的目的

 

不带缓存的I/O是对文件描述符操作,带缓存的I/O是针对流的

 

提供三种类型的缓存:

全缓存

行缓存:遇到换行符或缓存满时,才由标准I/O执行实际I/O操作 printf,strin,stdout

无缓存:作用相当于readwritestderr

 

每次使用fgetsfputs时,需要复制两次数据

第一次是在内核和标准I/O缓存之间

第二次是在标准I/O缓存和用户程序的行缓存之间

 

一个流一般对应一个文件

int fflush(FILE *stream);  手动刷新缓存

 

创建和打开:FILE *fopen(char *filename,char *mode)

r,rb  :文件必须已经存在

w,wb:如果文件不存在则创建,如果已存在,则清空重写

a,ab: 只能在文件末尾追加数据,如果文件不存在则创建

 

关闭 int  fcloseFILE *stream

若成功则返回0,有错误发生则返回EOF

 

fputc(int c,FILE *stream) 将参数c转换为unsigned char 后写入stream指定文件中

fgetc(FILE *stream)  stream所指文件中读取一个字符,若返回EOF则表示到了文件尾

 

fputs(int c,FILE *stream) s所指的字符串到写入stream指定文件中

Fgets(char *s,size,stream) stream所指文件内读入字符并存到s所指的内存空间,直到出现换行符,读到文件尾或已读了size-1个字节,最后加上NULL作为字符串结束

若成功则返回s指针,返回NULL表示有错误发生

 

size_t fread(*ptr,size,nmemb,*stream)  返回实际读取的块数

size_t fread(*ptr,size,nmemb,*stream) 将数据写入到文件流中。返回实际写入的块数

 

取得文件流的读写位置

ftell(FILE  *stream)  成功时返回目前的读写位置,若有错误则返回-1

 

getcfgetc作用相同,putcfputc作用相同,但getc,putc为宏定义,非真正的函数调用

 

fprintf( * stream,* format ,... ) 将结果输出到stream指定文件中,直至出现‘\0

fscanf(* stream,* format ,...)   stream指定文件中读取字符串

 

feof() 用来侦测是否读取到了文件尾,如果已到了文件尾返回非零值,其他情况返回0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值