2013-09-0914:40:13

1. 头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

2. 定义函数:

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

3. 函数说明:

3.1 参数pathname指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标:

O_RDONLY 以只读方式打开文件。
O_WRONLY 以只写方式打开文件。
O_RDWR 以可读写方式打开文件。
上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_EXCL 如果O_CREAT也被设置,此指令会去检查文件是否存在,文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。
O_NOCTTY 如果欲打开的文件为终端机设备时。则不会将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0。而原来存于该文件的资料也会消失。
O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数pathname所指的文件为一符号连接,则会令打开文件失败。
O_DIRECTORY 如果参数pathname所指的文件并非为一目录,则会令打开文件失败。注:此为Linux2. 2以后特有的旗标,以避免一些系统安全问题。 

3.2 参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask 值所影响,因此该文件权限应该为 (mode-umaks)。

S_IRWXU 00700权限,代表该文件所有者具有可读、可写及可执行的权限。
S_IRUSR 或S_IREAD 00400权限,代表该文件所有者具有可读取的权限。
S_IWUSR 或S_IWRITE 00200权限,代表该文件所有者具有可写入的权限。
S_IXUSR 或S_IEXEC 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权限,代表其他用户具有可执行的权限。

3.3 返回值:若所有欲核查的权限都通过了检查则返回0,表示成功,只要有一个权限被禁止则返回-1。

  错误代码:

EEXIST 参数pathname 所指的文件已存在,却使用了O_CREAT 和O_EXCL 旗标。
EACCESS 参数pathname 所指的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname不是目录。
ENOMEM 核心内存不足。
ELOOP 参数pathname有过多符号连接问题。
EIO I/O存取错误。

附加说明:使用 access()作用户认证方面的判断要特别小心,例如在access()后再作open()空文件可能会造成系统安全上的问题。

4. 范例:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{int fd, size;char s[] = "Linux Programmer!\n", buffer[80];fd = open("/tmp/temp", O_WRONLY|O_CREAT);write(fd, s, sizeof(s));close(fd);fd = open("/tmp/temp", O_RDONLY);size = read(fd, buffer, sizeof(buffer));close(fd);printf("%s", buffer);
}

执行:

Linux Programmer!

转载于:https://www.cnblogs.com/eastnapoleon/p/3309917.html

c语言open()介绍相关推荐

  1. 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...

  2. java方法的参数传递规则_java语言参数传递介绍

    java语言参数传递介绍 Java不只是一种编程语言,它是一个完整的平台,拥有庞大的库,将诸如图形绘制.Socket连接.数据库存取等复杂操作进行了最大程度的简化.下面是小编分享的java语言参数传递 ...

  3. c语言中建一个文件的语法,C语言语法介绍_文件.ppt

    C语言语法介绍_文件 第十三章 本章要点 文件的基本概念 文件的基本函数 文件的顺序读写 文件的随机读写 文件简单应用 主要内容 13.1 C文件概述 13.2 文件类型指针 13.3 文件的打开与关 ...

  4. C语言学习笔记---001C语言的介绍,编译过程原理,工具等

    C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...

  5. html语言汇总,第三讲HTML语言全面介绍汇总.ppt

    第三讲HTML语言全面介绍汇总,c语言语句汇总,2016网络语言汇总,r语言对数据分类汇总,c语言面试题大汇总,r语言分类汇总,励志语言汇总,编程语言汇总,c语言简答题目汇总,r语言分组汇总 授课主要 ...

  6. Verilog语言语句介绍

    Verilog语言语句介绍 结构语句 initial语句 always语句 赋值语句 阻塞赋值 非阻塞赋值 使用方法 条件语句 if_else语句 case语句 结构语句 共有两个重要的结构语句 in ...

  7. 【JavaScript进阶学习】NodeJs语言的介绍及基本使用

    NodeJs语言的介绍 NodeJs服务器语言,后端语言,采用了ECMAScript的语法,用来在服务器中开启服务,操作文件,处理路径,处理请求,发送数据等服务功能. NodeJs的解析器:V8引擎 ...

  8. c语言驱动程序开发基础教程,C 语言入门介绍

    C 语言入门介绍 适用于初学者和专业人士的C语言教程采用编程方法,可帮助您轻松理解C语言教程.我们的C教程通过程序解释了每个主题. C语言是由Dennis Ritchie开发的,用于创建与硬件设备(例 ...

  9. 【一】c语言程序设计-介绍篇

    霜淮子的c语言程序设计,大家可以通过阅读我的文章学习c语言程序设计的一些基础知识,作者水平有限,如果发现错误,评论区!万分感谢! 大家也可以通过慕课学习浙江大学翁恺翁老师讲授的<c语言程序设计& ...

  10. 系统开发c语言技术参数,1 C语言 gcc 介绍 C 语言编译 main接受参数

    1 C语言 gcc 介绍 C 语言编译 main接受参数 发布时间:2020-07-19 20:18:28 来源:51CTO 阅读:1216 作者:990487026 1第一个c语言的hello wo ...

最新文章

  1. Code Forces Bear and Forgotten Tree 3 639B
  2. 如何导出Fortify 17.10扫描报告
  3. 【数学专题】组合数学与计数
  4. “昊论坛”热力来袭!一网打尽【微生物绝对定量】技术特色和应用
  5. JavaScript Office文档在线编辑备忘
  6. hive sql循环_hive存储过程
  7. 【Linux高频命令专题(23)】tar
  8. Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
  9. 比Redis快5倍的中间件,究竟为什么这么快?
  10. android查看应用权限管理,通过adb列出Android应用程序的权限
  11. Web基础(Java前端基础)
  12. 3种团队分组适应项目_分组团队竞赛活动方案
  13. Markdown部分语法使用
  14. 网上一位仁兄关于项目管理的总结
  15. java存储protobuf_java中利用mongodb存储protobuf
  16. pytorch:nn.ReLU(inplace=True) 中的参数 inplane 的作用
  17. 前端代码规范,vue 代码规范
  18. 2016年美国数学建模比赛(MCM/ICM) E题环境科学 Are we heading towards a thirsty planet? 人工精准翻译。...
  19. Markdown编辑器语法大全
  20. 谷歌浏览器Chrome无法自动同步的解决办法

热门文章

  1. cad批量转换低版本如何实现?
  2. imp 00017 由于 oracle 错误 6550,imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 20005 求大神!...
  3. 判断当前时间段是否在某个时间段内(当前小时是否在当日某个时间段)
  4. 智能化工厂管理系统软件整体解决方案商
  5. 【BLE】CC2541之OAD
  6. js中isNaN和Number.isNaN的区别
  7. C#FFmpeg视频采集与推送RTMP服务器代码思路整理
  8. seamless kernel updates
  9. browse.php?u,phpMyRecipes browse.php SQL注入漏洞
  10. php时间戳,日期时间转换及使用大全