冲冲冲 follow me!!!O(∩_∩)O
1.文件描述符
1.非负的整数。
2.表示一个打开的文件。
3.由系统调用(open)返回,被内核空间(后续系统调用)引用。
4.内核每次打开时,都会自动为每个进程自动缺省三个文件描述符:
1).stdin 0 ------------标准输入
2).stdout 1 ------------标准输出
3).stderr 2 -------------标准出错
这意味着每次开始时,每个进程的文件描述符从3开始。
5.文件描述符的范围介于0到OPEN_MAX之间。
2.文件系统调用
1).open和close
int open(const char *pathname, int flags);
int open(const char *pathname, //路径
int flags, //模式(是指对文件内容)
mode_t mode //文件权限(仅创建文件有效)
); //创建/读写文件时都可用次函数
int creat(const char *pathname, //路径
mode_t mode //文件权限
);
int close(
int fd; //文件描述符
);
文件权限(mode)
chmod 777 filename
-rw------- (600) 只有所有者才有读和写的权限
-rw-r–r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx–x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
转载于:https://www.cnblogs.com/dashi/p/4191609.html
模式(flags)
1.O_RDONLY -只读
2.O_WRONLY -只写
3.O_RDWR -读写
4.O_APPEND -追加
5.O_CREAT -创建,不存在即创建(已存在即直接打开,并保留原内容,)使用时需要mode参数才有效。
6.O_EXCL -排斥,已存在即失败。
7.O_TRUNC -清空,已存在即清空。
2). write
ssize_t write( //返回成功写入的字节数,否则返回-1
int fd, //文件描述符
const void *buf, //缓冲区
size_t count //期望写入的字节数
);
3).read
ssize_t read( //返回成功写入的字节数,否则返回-1
int fd, //文件描述符
void *buf, //缓冲区
size_t count //期望读取的字节数
);
4).lseek
1.每个打开的文件都有一个与其相关的相关的“文件位置”。(相同文件以不同的模式打开,文件起始位置可能不同,例如指定了O_APPEND 追加,文件位置在最后)
2.lseek函数仅将文件位置记录在内核中,并不引发任何I/0动作。
3.在超越文件尾的文件位置写入数据,将在文件中形成空洞。
4.文件空洞不占用磁盘空间,但被算在文件大小内。
off_t lseek(
int fd, //文件描述符
off_t offset, //偏移量
int whence //起始位置
);
//除非文件模式为 O_APPEND追加模式,否则文件位置一律为0。
SEEK_SRT 文件头
SEEK_CUR 当前位置
SEEK_END 从文件尾
5).dup/dup2
//成功返回oldfd的副本,失败返回-1
int dup(int oldfd); //返回一个未被使用的最小文件描述符,且文件已打开
int dup2(int oldfd, int newfd);//可以指定文件描述符的值,若描述符已打开,则先关闭,返回文件描述副本。
图片为转载 非原创。