相关函数:read, write, fcntl, close, link, stat, umask, unlink, fopen

头文件:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>

定义函数:
    int open(const char * pathname, int flags);
    int open(const char * pathname, int flags, mode_t mode);

函数说明:

参数 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 以后特有的旗标, 以避免一些系统安全问题.

参数mode 则有下列数种组合, 只有在建立新文件时才会生效, 此外真正建文件时的权限会受到umask 值所影响, 因此该文件权限应该为 (mode-umaks).
S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行的权限.
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 权限, 代表其他用户具有可执行的权限.

返回值:若所有欲核查的权限都通过了检查则返回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()空文件可能会造成系统安全上的问题.

范例

 1 #include <unistd.h>
 2 #include <sys/types.h>
 3 #include <sys/stat.h>
 4 #include <fcntl.h>
 5 main()
 6 {
 7     int fd, size;
 8     char s[] = "Linux Programmer!\n", buffer[80];
 9     fd = open("/tmp/temp", O_WRONLY|O_CREAT);
10     write(fd, s, sizeof(s));
11     close(fd);
12     fd = open("/tmp/temp", O_RDONLY);
13     size = read(fd, buffer, sizeof(buffer));
14     close(fd);
15     printf("%s", buffer);
16 }

转载于:https://www.cnblogs.com/jikexianfeng/p/7085795.html

C语言open()函数:打开文件函数(转)相关推荐

  1. linux so lazyload,linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间...

    转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...

  2. fopen是python内置函数吗_Python内置的open函数,打开文件的时候可能会产生异常_学小易找答案...

    [简答题]模仿操作一回. 上传JPG. [单选题]关于唐.宋诗之间的差异,缪钺.钱钟书.启功等学者都曾有过论述,请问以下哪一项评论出自钱钟书的<谈艺录>? [单选题]"羌笛何须怨 ...

  3. linux 内存中建立文件,linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间...

    转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...

  4. python open函数用法_Python使用open函数打开文件的常用模式

    python 中open()的用法? open("/path/to/my/image.png", "rb") 中的'rb'代表了什么意思?所有试图感动你而做的事 ...

  5. c语言open函数打开文件方式,Linux中C语言open函数打开或创建文件详细讲解

    Linux中C语言open函数打开或创建文件详细讲解 Linux中C语言open函数打开或创建文件详细讲解 头文件: #include #include #include 函数原型: int open ...

  6. c语言函数的使用步骤,c语言打开文件函数使用方法

    ANSI C规定文件打开用函数fopen,关闭为fclose. 1.调用方式通常为: FILE *fp; fp=fopen(文件名, 打开方式); 2.参数说明: 文件名: 形如"myfil ...

  7. Python open函数打开文件路径

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符,标示符'r'表示读. >>> f = open('D:/test.txt','r') 注 ...

  8. open()—打开文件函数

    头文件:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h> 定义函数:   ...

  9. python open函数默认路径_Python open函数打开文件路径

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符,标示符'r'表示读. >>> f = open('D:/test.txt','r') 注 ...

最新文章

  1. R语言应用calibrate包的textxy函数向R原生绘图结果中添加文本标签:添加多个文本标签、改变文本标签的字体、改变文本标签的字体颜色
  2. Lightingcolorfilter 滤镜
  3. error while loading shared libraries: libopencv_highgui.so.3.2: cannot open shared object file 的解决办法
  4. 16-CoreData之多表关联(存储自定义数据模型)
  5. 《数据库SQL实战》获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salary
  6. python selenium使用JS新建标签(new tab)与切换标签
  7. 可解释性系列论文:Mathematics of Deep Learning
  8. 主题:JAVA 桥接模式
  9. aspx页面中文汉字显示为乱码
  10. solr中facet及facet.pivot理解
  11. 空指针、NULL指针、零指针
  12. Valve员工手册,一部震惊世界的“人生攻略”
  13. c++ opencv4.5.0 头文件_简单的C程序分析(first.c程序)
  14. KMPlayer播放mkv视频不出声音的解决办法
  15. 【计算机视觉40例】案例10:隐身术
  16. torch.Tensor详解
  17. linux堆栈有什么作用,嵌入式世界里,堆栈的作用和意义
  18. c语言数独出题程序,C语言实现的数独解题程序
  19. imToken—钱包如何导出助记词?
  20. 线上引流获客渠道有哪些

热门文章

  1. 你还在犹豫要不要学习Java?不妨来看看我的见解如何?
  2. 如何系统性的学习 Javascript?
  3. mysql的time格式化_【mysql格式化日期】
  4. c51随机数不重复_怎么让51单片机产生随机数?
  5. php备份远程系统快照,ZFS snapshot高级篇之快照备份
  6. python 进度条_6种酷炫Python运行进度条
  7. oracle bucket trace,Frequent generate a lot of cdmp* directories contain *bucket trace in bdump
  8. C语言排序方法-----直接插入排序
  9. 驱动GPIO操作归纳
  10. 作业一——根据成绩计算出至少需要发多少奖金才能让所有的组满意。