系统调用open函数

open() 系统调用

通过open()系统调用来打开文件并获得一个文件描述符。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open (const char *name, int flags);
int open (const char *name, int flags, mode_t
mode);

open() 系统调用将路径名name 给出的文件与一个成功返回的文件描述符相关联,文件位置指针被设定为零,而文件则根据flags给出的标志位打开

open()的flags参数

flags参数必须是以下之一:O RDONLY,O_WRONLY,O_RDWR。这些参数各自指定要用只读,只写还是读写模式打开文件。
举例来说,下面的代码以只读方式打开文件/home/kidd/madagascar。

int fd;
fd = open (‘‘/home/kidd/madagascar’’, O_RDONLY);
if (fd==-1)
/* error */

以只写方式打开的文件不能被读取,反之亦然。进程必须要有足够的权限才能调用open() 系统调用对文件进行访问。
flags 参数可以和以下一个或多个值进行按位或运算,用以修改打开文件请求的行为。
O_APPEND 文件已追加模式下打开。就是说,在每次写操作之前,文件位置指针将被置于文件末尾。即使在进程刚刚完成写操作并改变文件位置指针之后,如有另一进程开始写操作,情形也是如此。
O_ASYNC 当指定文件可写或者可读时产生一个信号(默认是SIGIO)。这个标志仅用于终端和套接字,不能用于普通文件。
O_CREAT 当name指定的文件不存在时,将由内核来创建。如果文件已存在用于在opendir()内部使用。
O_DIRECT 打开文件用于直接I/O
O_EXCL 和O_CREAT一起给出的时候,如果由name给定的文件已经存在,则open()调用失败。用来防止文件创建时出现竞争。
O_LARGEFILE 给定文件打开的时候将使用64位偏移量,这样大于2G的文件也能被打开。
O_NOCTTY 如果给定的name指向一个终端设备,它将不会成为这个进程的控制终端,即使该进程目前没有控制终端。
O_NOFOLLOW 如果name是一个符号链接,opne()调用会失败。
O_NONBLOCK 如果可以,文件 将在非阻塞模式下打开。
O_SYNC 打开文件用于同步I/O。
O_TRUNC 如果文件存在,且为普通文件,并且允许写,将文件的长度截断为0。

int fd;
fd = open (”/home/teach/pearl”, O_WRONLY |
O_TRUNC);
if (fd == -1)
/* error */

除非创建了新文件,否则mode参数会被忽略;而当O_CREAT给出时则需要。

mode参数

S_IRWXU 所有者拥有读写和执行权限
S_IRUSR 所有者拥有读权限
S_IWUSR 所有者拥有写权限
S_IXUSR 所有者拥有执行权限
S_IRWXG 组拥有者读写和执行权限
S_IRGRP 组拥有者读权限
S_IWGRP 组拥有者写权限
S_IXGRP 组拥有者执行权限
S_IRWXO 任何其他人都有读写和执行的权限
S_IROTH 任何其他人都有读权限
S_IWOTH 任何其他人都有写权限
S_IXOTH 任何其他人都有执行权限

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值