Chinaunix首页 | 论坛 | 博客
  • 博客访问: 558976
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-11-26 15:49:24

对linux内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。
UNIX系统shell使用文件描述符0与标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错相关联。
0------STDIN_FILENO
1------STDOUT_FILENO
2------STDERR_FILENO
本节中讲述open函数,调用open函数可以打开或创建一个文件。
#include
#include
#include
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
为啥会有两个函数原型呢?下面会解释到
首先对入参进行说明,
1) pathname---------简单,路径+文件名
2) flags
O_APPEND--------------每次写文件时都追加到文件末尾
O_CREAT----------------若文件不存在,则创建它,此时使用第三个入参mode,这里也就说明了如果使用了O_CREAT标记,必须有mode,如果没有使用O_CREAT标记,则不需要mode入参,这就是为啥有两个函数原型的原因了
O_TRUNC----------------如果文件已经存在,并且是普通文件,打开模式允许写操作(即O_WRONLY,O_RDWR),该文件会被裁减到0.
O_EXCL--------------保证调用open函数必须创建文件,如果与O_CREAT同时使用,并且将要打开的文件已经存在,那么open将会出错。值得注意的是,如果O_CREAT没有指定,那么O_EXCL行为是未定义的。说明O_EXCL和O_CREAT必须同时存在。
3)mode
   只用当open的第二个入参中包含O_CREAT时,才需要使用mode。mode指的是文件的访问权限。
S_IRUSR---------------------用户读
S_IWUSR--------------------用户写
S_IXUSR---------------------用户执行
S_IRGRP---------------------用户组读
S_IWGRP--------------------用户组写
S_IXGRP---------------------用户组执行
S_IROTH---------------------其它读
S_IWOTH--------------------其它写
S_IXOTH---------------------其它执行



阅读(1040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~