这一章给出了诸多的文件操作的函数,我把这些函数总结一下
open() creat() close() read() write() lseek() fstat() stat() mmap() nummap() fcntl() ioctl()
1.open()
//函数原型
int open(const char *pathname , int flags);
int open(const char *pathname , int flags , mode_t mode);
//文件描述符 open(路径,方式,权限);
其中flags有:
符号 值 作用
O_RDONLY 0 打开方式为只读
O_WRONLY 1 打开方式为只写
O_RDWR 2 打开方式为读写
O_CREAT 64 文件不存在,就创建该文件(加上这个后必须填第三个权限位)
O_EXCL 128 查看文件是否存在,如果同时使用了(O_EXCL|O_CREAT)且文件存在,就会open()就会返回-1(文件打开失败)
O_TRUNC 512 打开的同时清空该文件
O_APPEND 1024 写操作时,都写到文件末尾
函数判断标识位的时候是按位判断的,最低位为0,则使用O_RDONLY最低位则使用1则为O_WRONLY。低二位为1则使用O_RDWR,低7位为1则使用O_CREAT...
显然,可以通过位运算 或---> ‘|’ 把它们叠加起来。
对于权限位:
这一位只有选择O_CREATf方式打开,才有效。权限位有对应的符号 :
符号 值 对应文件权限
S_IRWXU 0700 rwx|===|===
S_IRUSR 0400 r==|===|===
S_IWUSR 0200 =w=|===|===
S_IXUSR 0100 ==x|===|===
S_IRWXG 0070 ===|rwx|===
S_IRGRP 0040 ===|r==|===
S_IWGRP 0020 ===|=w=|===
S_IXGRP 0010 ===|==x|===
S_IRWXO 0007 ===|===|rwx
S_IROTH 0004 ===|===|r==
S_IWOTH 0002 ===|===|=w=
S_IXOTH 0001 ===|===|==x
这个也可以用位运算或叠加,不建议用标识符,还是直接填权限,简单又方便。
注:1.路径不能识别自定义变量和环境变量,可以识别 ./ (当前目录)和 ../ (上个目录)
2.文件描述符用于对文件的操作,是一个int型的数,表示当前第几个文件。
3.文件打开失败,open()返回-1.
2.creat()
//函数原型
#inlcude<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char *pathname,mode_t mode);
//等同于int open(const char *pathname,O_WRONLY|O_CREAT|O_TRUNC,mode_t mode);
//参照open()吧
3.close()
//函数原型
#include<unistd.h>
int close(int fd);
//(成功结束返回0,否则-1) close(文件描述符)
用于关闭open()打开的文件.
4.read()
<span style="font-size:12px;color:#330033;">//函数原型
#include<unistd.h>
ssize_t read(int fd,void *buf, size_t count);
//成功读取的字节数 read(要操作的文件的描述符,要存放的地址指针,要读取的个数);
//size_t与ssize_t在头文件中被typedef定义
//typedef unsigned int size_t;
//typedef signed int ssize_t;</span>
关于read()的返回值,如果执行失败返回-1;执行成功,返回成功读取的字节数;如果执行函数之前文件已经被读到末尾,返回0.
另外执行read()对应的文件的打开必须要有可读权限。
5.write()
//函数原型
#include<unistd.h>
ssize_t write(int fd,const void *buf, size_t count);
//成功写入的字节数 write(要写入的文件的描述符,要写入的数据的指针,要写入的字节数);
6.lseek()
//函数原型
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fildes,off_t offset,int whence);
//偏移量 lseek(文件描述符,偏移量,操作模式);
//typedef long int off_t
操作方式:
符号 作用
SEEK_SET 设置偏移量为 0+offset
SEEK_CUR 设置偏移量为 当前位置+offset
SEEK_END 设置偏移量为 文件尾部+offset
如果执行成功返回新文件的偏移量,失败返回-1
7.fstat()