Linux文件
open

int fd=open("test.txt",O_RDWR|O_CREAT);
- 当
创建不加mode时,在文件不存在的情况下,默认创建文件权限是000——因为是系统调用接口,所以权限是000也是可以理解的;mode是需要用户自己给的 - 但是还有一个问题,这个是
创建+读写打开,如果需要打开的文件本身不存在,创建的是000权限的文件,文件是不允许读写——就会报错
综上:调用系统接口创建文件的时候必须要加mode
fopen创建文件权限

open创建文件权限
未加mode创建

加mode创建文件

综上:open创建文件必须加mode,如果不给权限,什么都干不了
- mode只能在
O_CREAT之后使用,也就是只能在创建的时候使用,只要文件已经生成就不能在修改权限O_CREAT | O_RDONLY,O_CREAT | O_WRONLY,O_CREAT | O_RDWR都是可以加mode的
lseek

whence——偏移类型(三选一)
他们本质是设置,但是他们用途不同
SEEK_SET:该文件的偏移量设为离文件开头offset个字节
SEEK_CUR:该文件的偏移量设为其当前值加offset(PS :offest可正负).
SEEK_END:该文件的偏移量设为文件长度加offset
文件描述符
概念
当需要使用文件的时候,OS创建struct file,将描述信息添加进pcb的struct files_struct 中使用数组进行管理,使用数组下角标进行标识文件
重定向
使用dup2(new_fd,old_fd)进行替换,最后留下的是new_fd;重定向的本质是new_fd空间所表示的信息复制给old_fd空间,从而达到重定向的作用
性质
- FILE结构一定封装了fd

lseek优秀文章
先fork后open,先open后fork的区别