读写权限
O_RDONLY: 表示以只读方式打开(为了保护一些重要的文件被更改)
O_WRONLY: 表示以只写方式打开
O-RDWR: 表示以可读可写的方式打开
O_TRUNC属性去打开文件时,如果这个文件中本来是有内容的,则原来的内容会被丢弃。
O_APPEND属性去打开文件时,如果这个文件本来是有内容的,则新写入的内容会接续到原来内容的后面。
当这两个同时存在的时候,是O_TRUNC起作用。
O_CREATE是为了应对这种打开一个不存在的文件。O_CREATE表示当前打开的文件不存在,创建并打开他。如果这个文件本来存在了,那么就会把这个文件删掉重新创建一个。为了防止把重要的文件删除,通常需要配合o_EXCL使用。当这两个标志一起的时候,则没有文件时创建文件,有这个文件时报错。
O_NONBLOCK
阻塞与非阻塞。如果一个函数是阻塞式的,则我们调用这个函数时当前进程有可能被卡住(实质是这个函数内部要完成的事情条件不具备),函数被阻塞住了就不能立刻返回。如果一个函数是非阻塞式的,那么我们调用这个函数后会立即返回,但是函数有没有完成无法保障。
阻塞和非阻塞是两种不同的设计思路,阻塞式的结果有保障但是时间没保障,非阻塞式的时间有保障但是结果没有保障。
操作系统提供的API和由API封装而成的库函数,由很多本身就是被设计为阻塞式或者非阻塞式的,调用的时候要了解清楚。
只适用于设备文件,而不用于普通文件。
默认打开一个文件是阻塞的,如果要设置为非阻塞,则要在flag加O_NONBLOCK。
O_SYNC
write阻塞等待底层完成写入才返回到底层
五O_SYNC时write只是将内容写入底层缓冲区即可返回,然后底层(操作系统中负责实现open、write这些操作的那些代码,也包含OS中读写硬盘等底层硬件的代码)在合适的时候会将buf中的内容一次性同步到硬盘中。这种设计是为了提升硬件操作的性能和效率,提升硬件的寿命。但是有时候我们希望硬件不要等待,直接将我们的内容写入到硬盘中,这时候就可以用O_SYNC标志。
mode参数
mode是来指定要创建的文件的权限。mode使用4个数字来指定权限,后面三个很重要,对应我们要创建的文件的权限。比如要创建一个可读可写不可执行的文件就用0666
