Linux open函数简介_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
5
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3479 | 回复: 4   主题: Linux open函数简介        上一篇   下一篇 
solo9867
注册用户
等级:新兵
经验:61
发帖:71
精华:0
注册:2011-12-15
状态:离线
发送短消息息给solo9867 加好友    发送短消息息给solo9867 发消息
发表于: IP:您无权察看 2016-1-11 14:35:06 | [全部帖] [楼主帖] 楼主

open 函数用于打开和创建文件。以下是 open 函数的简单描述

#include <fcntl.h>
 
 int open(const char *pathname, int oflag, ... );
 
 返回值:成功则返回文件描述符,否则返回 -1


对于 open 函数来说,第三个参数(...)仅当创建新文件时才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。

 O_RDONLY      只读模式
 O_WRONLY      只写模式
 O_RDWR        读写模式


打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:

O_APPEND       每次写操作都写入文件的末尾
 O_CREAT        如果指定文件不存在,则创建这个文件
 O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
 O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
 O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。
 O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)


以下三个常量同样是选用的,它们用于同步输入输出

 O_DSYNC        等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
 O_RSYNC        read 等待所有写入同一区域的写操作完成后再进行
 O_SYNC         等待物理 I/O 结束后再 write,包括更新文件属性的 I/O


open 返回的文件描述符一定是最小的未被使用的描述符。

如果 NAME_MAX(文件名最大长度,不包括'\0')是 14,而我们想在当前目录下创建文件名长度超过 14 字节的文件,早期的 System V 系统(如 SVR2)会截断超出部分,只保留前 14 个字节;而由 BSD 衍生的(BSD-derived)系统会返回错误信息,并且把 errno 置为 ENAMETOOLONG。

POSIX.1 引入常量 _POSIX_NO_TRUNC 用于决定是否截断长文件名/长路径名。如果_POSIX_NO_TRUNC 设定为禁止截断,并且路径名长度超过 PATH_MAX(包括 '\0'),或者组成路径名的任意文件名长度超过 NAME_MAX,则返回错误信息,并且把 errno 置为 ENAMETOOLONG。




--转自



赞(0)    操作        顶端 
云浅月93
注册用户
等级:少尉
经验:328
发帖:0
精华:0
注册:2015-12-4
状态:离线
发送短消息息给云浅月93 加好友    发送短消息息给云浅月93 发消息
发表于: IP:您无权察看 2016-2-5 15:41:08 | [全部帖] [楼主帖] 2  楼



赞(0)    操作        顶端 
k3neeb
注册用户
等级:上尉
经验:799
发帖:15
精华:0
注册:2015-5-28
状态:离线
发送短消息息给k3neeb 加好友    发送短消息息给k3neeb 发消息
发表于: IP:您无权察看 2016-3-14 9:50:22 | [全部帖] [楼主帖] 3  楼

头文件

#include<sys/types.h> 

#include<sys/stat.h>

#include<fcntl.h>

函数原型

int open(const char *path, int oflags,mode_t mode);

函数说明

    open建立了一条到文件或设备的访问路径。

open函数一般用于打开或者创建文件,在打开或创建文件时可以制定文件的属性及用户的权限等各种参数。

    

第一个参数path表示:路径名或者文件名。路径名为绝对路径名(如C:/cpp/a.cpp,文件则是在当前工作目录下的。

第二个参数oflags表示:打开文件所采取的动作。

    可能值:必须指定下面某一种:

    O_RDONLY(只读),

    O_WRONLY(只写),

    O_RDWR(可读可写)

打开/创建文件时,至少得使用上述三个常量中的一个,以下常量是选用的:

 O_APPEND      每次写操作都写入文件的末尾

O_CREAT        如果指定文件不存在,则创建这个文件

O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改errno的值

O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容

O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。

O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继  I/O

                       设置为非阻塞模式(nonblocking mode

第三个参数mode表示:设置文件访问权限的初始值。(与用户掩码umask变量有关,实际的访问权限有mode &~umask确定)

       S_IRUSR,S_IWUSER,S_IXUSR,S_IRGRP,S_IWGRP,S_IXGRP,S_IROTH,S_IWOTH,S_IXOTH.其中R:读,W:写,X:执行,USR:文件所属的用户,GRP:文件所属的组,OTH:其他用户。

 

注:第三个参数是在第二个参数中有O_CREAT时才用作用。若没有,则第三个参数可以忽略。

返回值:如果操作成功,它将返回一个文件描述符,如果失败,返回-1

显然这是用open函数对字符串数组进行操作,对filename设置了可读动作。

执行结果:(test.txt) open success !



赞(0)    操作        顶端 
wangujc
注册用户
等级:上尉
经验:721
发帖:20
精华:0
注册:2015-5-28
状态:离线
发送短消息息给wangujc 加好友    发送短消息息给wangujc 发消息
发表于: IP:您无权察看 2016-3-14 20:57:02 | [全部帖] [楼主帖] 4  楼



赞(0)    操作        顶端 
twany
注册用户
等级:少校
经验:1408
发帖:17
精华:0
注册:2015-6-2
状态:离线
发送短消息息给twany 加好友    发送短消息息给twany 发消息
发表于: IP:您无权察看 2016-3-15 9:36:59 | [全部帖] [楼主帖] 5  楼

好东西,学习了



赞(0)    操作        顶端 
总帖数
5
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论