Linux 文件操作 API

Linux文件操作
一、6个系统调用,不带缓冲的I/O操作
creat open read write lseek close
头文件:stdio.h stdlib.h sys/types.h sys/stat.h unistd.h fcntl.h

1.creat函数
用于建立文件
定义函数 int creat(const char *pathname,mode_t mode)
第一个参数指向想要建立的文件路径字符串,第二个参数是一些宏
简单一些常用的宏:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 如果不存在就创建
O_TRUNC 若文件存在且以可写的方式打开,令文件长度清零,相当于清空文件
O_APPEND 读写文件时从文件尾开始,所写数据会以附加方式加入到文件后面
权限的宏:
S_IRWXU 代表可读可写可执行
S_IRUSR或S_IREAD 可读权限
S_IWUSR或S_IWRITE 可写权限
S_IXUSR或S_IEXEC 可执行权限
S_IRWXG 用户组有读写执行权限
S_IRGPR S_IWGPR S_IXGPR
S_IRWXO 其他用户有读写执行权限
S_IROTH S_IWOTH S_IXOTH
错误代码:
EEXIST 所指文件已存在
EACCESS 所指定文件不符合所要求测试的权限
EROFS 欲打开写入权限的文件存在于只读文件系统内
EFAULT 指针超出可存取的内存空间
EINVAL mode 不正确
ENAMETOOLONG pathname太长
EMFILE 已达到进程可同时打开的文件数上限
ENFILE 已达到系统可同时打开文件数上限

返回值 发生错误返回-1,错误代码errno中

2.open函数
int open(const char *pathname,int flags)
int open(const char *pathname,int flags, mode_t mode)
pathname指向欲打开的文件路径字符串
flags就是刚才一些常用的宏,如果flag参数里有O_CREAT,表示如果该文件不存在,系统自动创建该文件,该文件的权限由第三个参数决定。
返回值:0表示成功 1表示失败

3.read函数
ssize_t read(int fd,void *buf, size_t count)
把参数fd所指文件传送count个字节到buf所指的内存中
返回值为实际读到的字节数,有错误发生时返回-1,错误代码存入errno中,而文件读写位置无法预期。最好是将返回值与count比较,若返回的字节数小,则可能读到了文件末尾。

4.write函数
ssize_t write(int fd, const void *buf, size_t count)
把buf所指的内存中写入count个字节到参数fd所指文件中。返回实际写入的字节数,有错误发生时返回-1,错误代码存入errno中。

5.lseek函数
off_t lseek(int fd, off_t offset, int whence)
参数whence为下列选项的其中一种:
SEEK_SET 参数offset即为新的读写位置
SEEK_CUR 以目前的读写位置往后增加offset个位移量
SEEK_END 将读写位置指向文件尾后再增加offset个位移量
调用成功返回目前读写位置,错误返回-1

6.close函数
关闭已打开的文件,成功返回0,有错误发生返回EOF,错误代码存入errno中。

二、C库函数的文件操作函数
1.fopen函数
FILE *fopen(const char *path, const char *mode)
mode:
r 只读方式打开,文件必须存在
r+读写方式打开,文件必须存在
w 只写方式打开,若文件存在则长度清零,不存在则创建
w+ 读写方式打开,若文件存在则长度清零,不存在则创建.
a 以附加方式打开只写文件,若不存在则创建,存在则写入的数据追加到文件末尾
a+读写方式打开,文件不存在则创建,文件存在追加写入
上述字符串都可以再加一个b字符,告诉函数库打开的文件为二进制文件而非单纯文本文件,不过在POSIX系统中都会hulve该字符

文件顺利打开返回指向该文件流的指针,打开失败返回NULL

2.fclose函数
关闭打开的文件,成功返回0,失败返回EOF

3.fdopen函数
FILE *fdopen(int filds, const char *mode)
用于将文件描述词转换为文件指针。
fdopen会将参数filds的文件描述词转换为对应的文件指针后返回,参数mode字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。

成功返回指向该流的文件指针,失败返回NULL

4.fread函数
size_t read(void *ptr, size_t size, size_t nmemeb, FILE *stream)
用于从文件流中读取数据
参数ptr指向欲存放读取进来的数据空间,读取字符数由参数size *nmemb来决定。返回实际读取到的nmemb数目,如果此值比nmemb小,则可能读到了文件尾或有错误发生。用feof或ferror函数判定发生了什么情况。

5.fwrite函数
用于将数据写入文件流
size_t write(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr指向欲写入的数据地址,总共写入的字符数由参数size *nmemb来决定,返回实际写入的nmemb数目。

6.fseek函数
int fseek(FILE *stream, long offset, int whence)
和lseek差不多。调用成功返回0,有错误返回-1。不会像lseek一样返回读写位置,因此必须使用ftell来取得当前读写位置。

7.ferror函数
ferror(FILE*)
ferror,函数名,在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。

8.ftell函数
返回当前文件读写位置。

三、fgetc getc getchar getch getche函数
fgetc函数
用于从文件读取一个字符

getc作用和fgetc相同,但getc为宏定义,非真正的函数调用。
getchar函数,用于从标准输入设备读取一个字符。非真正的函数调用,而是getc(stdin)的宏定义。

getch函数
getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1. 输入的字符不会回显在屏幕上 .getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.每摁一次键 就调用一次getch(),直到遇回车结束。如果在规定次数前结束,系统里面 并 没有存入结束符 ,我们要手动地在他末尾添加一个‘\0’字符

getche函数
从控制台读取字符,立即回显

两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche()函数却将读入的字符回显到显示屏幕上(getche()读入之后不管按不按回车立即回显)。利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能。

四、fputc putc putchar
fputc函数
用于将一指定字符写入文件流中,成功返回写入成功的字符,返回EOF表示写入失败。
putc
用于将一指定的字符写入文件,非真正的函数调用。
putchar
用于将指定的字符写到标准输出设备中。

五、fgets函数和gets函数
fgets函数用于从文件读取一字符串,直到出现换行符、读到文件尾或者读了size-1个字符位置,最后会加上NULL作为字符串结束。
gets函数用于从标准设备读入字符并保存到参数s所指的内存空间中,知道出现换行符或到文件末尾,最后加上NULL结束。由于gets函数无法知道s的大小,必须遇到换行符或文件为尾才结束输入,因此容易出现缓冲溢出的安全问题。

五、fprintf函数 sprintf函数
fprintf函数
用于格式化输出数据至文件。
int fprintf(FILE *stream, const char *format,…)
根据参数format字符串来转换并格式化数据,在将结果输出到参数stream指定的文件中,知道出现\0结束。

sprintf函数
用于格式化字符串复制
sprintf(char *str, const char *format,…)
根据参数format字符串来转换并格式化数据,再将结果复制到参数str所指定的字符串数组中,直到出现\0
成功返回str字符串长度,失败返回-1。

六、fscanf sscanf
fscanf函数
用于格式化字符串输入
int fscanf(FILE *stream, const char *format…)
从文件流中格式化读取字符串,转换后的结构存于对应的参数内。
成功返回参数数目,失败返回-1

sscanf函数
int sscanf(const char *str, const *format,…)
用于格式化字符串输入,转换后的结果存于对应的参数内。
成功返回参数数目,失败返回-1。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值