文件的创建与打开
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
功能:打开文件
pathname:文件路径
flags:打开文件的方式
返回值:文件描述符,失败返回负值
int open(const char *pathname, int flags, mode_t mode);
功能:打开或创建文件
pathname:文件路径
flags:打开方式
mode:创建文件时的权限
返回值:文件描述符,失败返回负值
int creat(const char *pathname, mode_t mode);
功能:专门用来创建文件,但基本不使用,因为open函数完全具备它的功能。
注意:open/creat所返回的一定是当前未被使用的,最小文件描述符。
一个进程可以同时打开的文件描述符个数,受limits.h中定义的OPEN_MAX宏的限制,POSIX要求不低于16,传统UNIX是63,现代Linux是255。
flags:
O_APPEND 打开文件后位置指针指向末尾
O_CREAT 文件不存在时创建
O_RDONLY 只读权限
O_WRONLY 只写权限
O_RDWR 读写权限
O_TRUNC 清空文件内容
O_EXCL 如果文件存在则创建失败
O_NOCTTY 若pathname指向控制终端,则不将该终端作为控制终端。
O_NONBLOCK 若pathname指向FIFO/块/字符文件,则该文件的打开及后续操作均为非阻塞模式。
O_SYNC write等待数据和属性,被物理地写入底层硬件后再返回。
O_DSYNC write等待数据,被物理地写入底层硬件后再返回。
O_RSYNC read等待对所访问区域的所有写操作,全部完成后再读取并返回。
O_ASYNC 当文件描述符可读/写时,向调用进程发送SIGIO信号。
mode:
S_IRWXU 00700
S_IRUSR 00400
S_IWUSR 00200
S_IXUSR 00100
S_IRWXG 00070
S_IRGRP 00040
S_IWGRP 00020
S_IXGRP 00010
S_IRWXO 00007
S_IROTH 00004
S_IWOTH 00002
S_IXOTH 00001
int close (int fd);
功能:关闭文件,成功返回0,失败返回-1
问题1:C语言可以定义重名函数吗?
可以,但需要在不同的作用域下才可以重名。
情况1:在不同的源文件中,static函数可以与普通函数重名。
情况2:在函数内定义的函数可以与普通函数重名。
问题2:系统调用为什么可以重名?
因为系统调用不是真正的函数,而是借助软中断实现的,决定执行哪个系统调用的是中断编号,而不是名字。
问题3:r,w,a,r+,w+,a+分配对应哪些flags标志?
"r" O_RDONLY
"r+" O_RDWR
"w" O_WRONLY|O_CREAT|O_TRUNC, 0666
"w+" O_RDWR|O_CREAT|O_TRUNC, 0666
"a" O_WRONLY|O_CREAT|O_APPEND, 0666
"a+" O_RDWR|O_CREAT|O_APPEND, 0666