fopen、open和popen区别
open:直接操作物理设备,比如磁盘、设备文件 一般设备/设备文件都通过open来操作
fopen:则通过缓冲区来操作,读写都在缓冲区上
popen:会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令
依照popen参数中的type值建立管道连接到子进程的输入/输出设备中,通过返回的指针对子进程
的输入、输出设备进行操作。
1. fopen
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()空文件可能会造成系统安全上的问题.
fopen、open和popen区别相关推荐
- open,write,read与fopen,fwrite,fread的区别
open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引. fopen:C语言库函数,返回的是一个指向文件结构的指针.fopen是ANSI C标准中的C语言库函数,在不同的操作 ...
- fopen与open的区别
一.fopen与open的区别 1.来源不同 open是unix系统调用函数(包括Linux),返回的是文件描述符,它是文件描述符表里的索引. fopen是ANSIC标准中的C语言库函数,在不同的系统 ...
- fopen 与 open 的区别
1.来源不同 open 是 unix 系统调用函数(包括 Linux),返回的是文件描述符,它是文件描述符表里的索引. fopen 是 ANSIC 标准中的 C 语言库函数,在不同的系统中应该调不同的 ...
- linux中fopen和open的区别,Linux下open与fopen的区别
int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下: O_RDONLY ...
- fopen和open的区别
文件操作一般分为两种:系统IO和标准IO 1.系统IO:系统调用接口,open(), read(), write(), close().是操作系统直接提供的编程接口(API). 2.标准IO:标准库的 ...
- fopen与open的区别(好文)
参考文章:http://www.cnblogs.com/hnrainll/archive/2011/09/16/2178706.html http://www.cnblogs.com/joeblack ...
- python os.system 512_python os.system os.popen 区别
最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 复制代码代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或者 ...
- python os.system os.popen 区别
python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后 者的返回值是脚本执行过程中的输出内容.实际使用时视需求情况而选择 ...
- c语言中freopen函数,fopen和freopen_C中freopen和fopen的区别(用法+详解+区别)
最佳答案 fopen 是操作文件用的,比如创建读取等,它有两个参数,第一个是文件名,第二个是操作方式. 第一个参数很好理解,因为是用来操作文件的,自然得告诉它要操作的是什么文件. 第二个参数也不难理解 ...
最新文章
- HP-UX B.11.31从安装到VG配置
- 网络扫描工具Nmap常用命令
- OVS bridge和port(三十三)
- C语言树形打印二叉树
- mysql将大表定时转储_mysql数据库数据定时封装转储
- java方法示例注释 @_Java注释和真实世界的Spring示例
- wltc循环多少公里_原来所有车都烧机油!但是烧多少才算正常你知道吗?
- easyui combobox 左匹配模糊查询
- mysql解压版怎么添加服务_Windows系统下MySQL添加到系统服务方法(mysql解压版)
- 编程语言 - 大数据 - Hadoop
- [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛
- 公安装备效能评估系统软件
- PreferenceActivity(首选项设置页)
- 网页木马是什么原理?
- python基础课件
- 什么是数据可视化技术
- 【降维打击】解决加密视频录屏问题
- 手工重建复合文档(.doc;xls,ppt)文件头,修复文件全过程
- 什么是火起来的“宅经济”,重庆阿尔克互联网技能帮扶学习,进入互联网
- CTF——MISC习题讲解(UTCTF2020系列)
热门文章
- matlab多缝衍射公式,多缝干涉仿真
- c++实现二叉排序树
- 奇偶位交换 牛客网 程序员面试金典 C++ Python
- 最接近的数 牛客网 程序员面试金典 C++ Python
- android 录入日期,Android 跟日期和时间有关的操作
- 【MySQL】with rollup的用法
- __main() 和 main()
- 表 1 化合物 1~95 的 TDP1 抑制活性(IC50、M 或 50M 时对 TDP1 的抑制率%)
- Firefox:曾经打破黑暗的产品
- UnityShader学习教程之<毛玻璃效果解析>