c语言open()介绍
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()介绍相关推荐
- 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...
- java方法的参数传递规则_java语言参数传递介绍
java语言参数传递介绍 Java不只是一种编程语言,它是一个完整的平台,拥有庞大的库,将诸如图形绘制.Socket连接.数据库存取等复杂操作进行了最大程度的简化.下面是小编分享的java语言参数传递 ...
- c语言中建一个文件的语法,C语言语法介绍_文件.ppt
C语言语法介绍_文件 第十三章 本章要点 文件的基本概念 文件的基本函数 文件的顺序读写 文件的随机读写 文件简单应用 主要内容 13.1 C文件概述 13.2 文件类型指针 13.3 文件的打开与关 ...
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...
- html语言汇总,第三讲HTML语言全面介绍汇总.ppt
第三讲HTML语言全面介绍汇总,c语言语句汇总,2016网络语言汇总,r语言对数据分类汇总,c语言面试题大汇总,r语言分类汇总,励志语言汇总,编程语言汇总,c语言简答题目汇总,r语言分组汇总 授课主要 ...
- Verilog语言语句介绍
Verilog语言语句介绍 结构语句 initial语句 always语句 赋值语句 阻塞赋值 非阻塞赋值 使用方法 条件语句 if_else语句 case语句 结构语句 共有两个重要的结构语句 in ...
- 【JavaScript进阶学习】NodeJs语言的介绍及基本使用
NodeJs语言的介绍 NodeJs服务器语言,后端语言,采用了ECMAScript的语法,用来在服务器中开启服务,操作文件,处理路径,处理请求,发送数据等服务功能. NodeJs的解析器:V8引擎 ...
- c语言驱动程序开发基础教程,C 语言入门介绍
C 语言入门介绍 适用于初学者和专业人士的C语言教程采用编程方法,可帮助您轻松理解C语言教程.我们的C教程通过程序解释了每个主题. C语言是由Dennis Ritchie开发的,用于创建与硬件设备(例 ...
- 【一】c语言程序设计-介绍篇
霜淮子的c语言程序设计,大家可以通过阅读我的文章学习c语言程序设计的一些基础知识,作者水平有限,如果发现错误,评论区!万分感谢! 大家也可以通过慕课学习浙江大学翁恺翁老师讲授的<c语言程序设计& ...
- 系统开发c语言技术参数,1 C语言 gcc 介绍 C 语言编译 main接受参数
1 C语言 gcc 介绍 C 语言编译 main接受参数 发布时间:2020-07-19 20:18:28 来源:51CTO 阅读:1216 作者:990487026 1第一个c语言的hello wo ...
最新文章
- Code Forces Bear and Forgotten Tree 3 639B
- 如何导出Fortify 17.10扫描报告
- 【数学专题】组合数学与计数
- “昊论坛”热力来袭!一网打尽【微生物绝对定量】技术特色和应用
- JavaScript Office文档在线编辑备忘
- hive sql循环_hive存储过程
- 【Linux高频命令专题(23)】tar
- Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
- 比Redis快5倍的中间件,究竟为什么这么快?
- android查看应用权限管理,通过adb列出Android应用程序的权限
- Web基础(Java前端基础)
- 3种团队分组适应项目_分组团队竞赛活动方案
- Markdown部分语法使用
- 网上一位仁兄关于项目管理的总结
- java存储protobuf_java中利用mongodb存储protobuf
- pytorch:nn.ReLU(inplace=True) 中的参数 inplane 的作用
- 前端代码规范,vue 代码规范
- 2016年美国数学建模比赛(MCM/ICM) E题环境科学 Are we heading towards a thirsty planet? 人工精准翻译。...
- Markdown编辑器语法大全
- 谷歌浏览器Chrome无法自动同步的解决办法
热门文章
- cad批量转换低版本如何实现?
- imp 00017 由于 oracle 错误 6550,imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 20005 求大神!...
- 判断当前时间段是否在某个时间段内(当前小时是否在当日某个时间段)
- 智能化工厂管理系统软件整体解决方案商
- 【BLE】CC2541之OAD
- js中isNaN和Number.isNaN的区别
- C#FFmpeg视频采集与推送RTMP服务器代码思路整理
- seamless kernel updates
- browse.php?u,phpMyRecipes browse.php SQL注入漏洞
- php时间戳,日期时间转换及使用大全