电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » 文件IO 中的两个函数creat和open


共2条 1/1 1 跳转至

文件IO 中的两个函数creat和open

工程师
2017-09-09 14:20:12    评分

 

文件IO 中的两个函数creatopen


    今天开始学习unix/linux系统下的文件I/O函数打开文件、读文件、写文件等。大多数文件I/O只需要用到5个函数:open,read,write,lseek已经close,5个函数都直接调用同名的系统调用,所以是不带缓冲的,本节,主要介绍opencreat函数。

 

1.open函数

1)函数原型:

#include <fcntl.h>

int open(const char* pathname,int flags)

int open(const char* pathname,int flags,mode_t mode);

 

2)函数功能:

打开或建立一个文件。对于open函数,仅当创建文件时,才用到第三个参数

 

3)参数说明:

pathname:打开或创建的文件名 

flags:用下列一个或多个常量进行运算构成flags参数(这些常量定义在<fcntl.h>

O_RDONLY   只读打开

O_WRONLY   只写打开

O_RDWR     读写打开

以上三个常量只能选一个,下面的则可以多选:

O_APPEND   每次写时都追加到文件的尾端。

O_CREAT     若此文件不存在,则创建它。使用此选项时,需要第三个参数mode,用其 指定新文件的访问权限。

O_EXCL      如果同时制定了O_CREAT,而文件已经存在,则会报错。因此可以测试一个 文件是否存在,如果不存在,则创建此文件,这使测试和创建两者成为一个原子操作。

O_TRUNC     如果此文件存在,而且为只读或读写成功打开,则将其长度截短为0

O_NOCTTY    如果pathname指的是终端设备,则不将该设备分配作为此进程的控制终端。

O_NONBLOCK 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件, 则此选项为文件的本次打开操作和后续的I/O操作设置非阻塞模式。

 

mode:用下列一个或多个常量进行运算构成mode参数(这些常量定义在sys/stat.h

S_IRWXU00700 拥有者读写执行权限

S_IRUSR 00400 拥有者读权限

S_IWUSR00200  拥有者写权限

S_IXUSR 00100 拥有者执行权限

S_IRWXG00070 组内成员读写执行权限

S_IRGRP 00040 组内成员读权限

S_IWGRP00020  组内成员写权限

S_IXGRP 00010 组内成员执行权限

S_IRWXO00007 其他成员读写执行权限

S_IROTH 00004 其他成员读权限

S_IWOTH00002  其他成员写权限

S_IXOTH 00001 其他成员执行权限

 

也可以直接指定mode的值,如0777,0541

注意:此处设定的mode的值并不是文件最终的权限,文件最终的权限是按照mode & ~umask得到的,而默认的umask0022,所以如果想按照mode的值设置文件权限,需要在建立文件之前将umask的值设置为0000

lkjsadhfkljhalksdjfdlfl;kasjdfkl;asjdfklajsdf.png




专家
2017-09-10 09:27:19    评分
2楼

谢谢楼主分析。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]