int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
以下三个常量中必选一个:
O_RDONLY //只读模式
O_WRONLY //只写模式
O_RDWR //读写模式
以下常量选用:
O_APPEND //每次写操作都写入文件的末尾
O_CREAT //如果指定文件不存在,则创建这个文件
O_EXCL //如果要创建的文件已存在,则返回-1,并且修改errno的值
O_TRUNC //如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0)
O_NOCTTY //如果路径名指向终端设备,不要把这个设备用作控制终端
O_NONBLOCK //如果路径名指向FIFO/块文件/字符文件,则把文件的打开和后继I/O
以下三个常量同样是选用的,它们用于同步输入输出:
O_DSYNC //等待物理I/O结束后再write。在不影响读取新写入的数据的前提下,不等待文件属性更新
O_RSYNC //read等待所有写入同一区域的写操作完成后再进行
O_SYNC //等待物理I/O结束后再write,包括更新文件属性的I/O

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

参数mode 组合
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权限,代表其他用户具有可执行的权限
creat(const char* pathname, mode_t mode);
open和creat区别:
creat()创建文件,总会运行成功
creat()创建已存在的文件,并不会更改原文件的属性

O_APPEND

含义是在每次写之前,都将标志位移动到文件的末端

int fd = open("test.txt", RDWR | O_APPEND);
lseek(fd, 10, SEEK_SET);

这里lseek是没有用的

转换

FILE *fp = fopen("test.txt", "r");
int fd = fileno(fp);

寻找文件流使用的是哪个底层文件描述符。进行底层访问操作(比如想对他调用fstat)

FILE *fdopen(int fd, const char *mode);

根据文件描述符创建文件流。为一个已经打开的文件描述符提供一个stdio缓冲区

Linux open fopen fdopen的更多相关文章

  1. fopen, fdopen, freopen - 打开流

    SYNOPSIS (总览) #include <stdio.h> FILE *fopen(const char *path, const char *mode); FILE *fdopen ...

  2. php 在linux 用fopen() 函数打开,file_get_contents(),fread()函数 读取 另外一台服务器映射过来的文件 总是返回false,null的情况。

    php 在linux 用fopen() 函数打开,fread()函数 读取  另外一台服务器映射过来的文件 总是返回false,null的情况. #获取平台类型   $type='android';  ...

  3. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

  4. Linux 系统编程

    简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...

  5. linux下 文件IO 相关

    linux下操作文件或设备,需要一个文件描述符 file descriptor,fd 来引用.fd是一个非负整数,实际上是一个索引值,指向文件的记录表,对文件的操作都需要fd.默认的几个:标准输入流 ...

  6. 【Linux】【Basis】【Kernel】Linux常见系统调用

    一,进程控制 1)getpid,getppid--获取进程识别号 #include <sys/types.h> #include <unistd.h> pid_t getpid ...

  7. 【转载++】fopen返回0(空指针NULL)且GetLastError是0

    结论来看,是一个简单又朴素的道理——打开文件句柄用完了得给关上.表现在现象上却是着实让人费解,以至于有人还怀疑起了微软的Winodws系统来了,可笑至极.还是那句话,先把自己的屁股先给擦干净喽再怀疑别 ...

  8. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  9. 嵌入式文件I/O操作

    今天把这块的东西算是看完了.总结一下,(1)这里包括底层文件的I/O操作,实际上是系统调用函数借口,是基于文件描述符的文件操作:(2)还有标准I/O操作,是基于缓冲流的文件操作:还有(3)串口的操作, ...

随机推荐

  1. fiddler---Fiddler抓取https协议

    上一篇简单的介绍了Fiddler的使用方法和页面布局介绍,Fiddler默认抓取的是HTTP协议,现在的协议基本上都是基于HTTPS协议的,今天写一篇如何通过Fiddler抓取HTTPS协议 什么是H ...

  2. python3.5.3rc1学习十一:字典与模块

    #os模块import oscurDir = os.getcwd()print(curDir) os.mkdir("新建") import timetime.sleep(2)os. ...

  3. 【矩阵快速幂】之奥运 hdu 2254

    1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市    血 ...

  4. 【转】理解并设计rest/restful风格接口

    网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...

  5. Vue入门案例(二)

    创建一个 .html 文件,然后通过如下方式引入 Vue: <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.js ...

  6. 鲜贝7.3--mysql 下载小问题

    安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable 问题原因大体是mysql自动安装的Vis ...

  7. centos 文本文件编码转换

    iconv -f utf-8 -t gbk   shtel_single_utf8.mlf > shtel_single_gbk.mlf

  8. kudu 查看元数据信息

    package com.lala.lala.pipe.dbinfo import org.apache.kudu.client.KuduClient import com.lala.lala.comm ...

  9. 队列和 BFS —— 栈和 DFS

    队列和 BFS: 广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径. 示例 这里我们提供一个示例来说明如何使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径. 洞悉 ...

  10. LeetCode 231.2的幂

    LeetCode 231.2的幂 题目: 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 算法: 若一个数是2的幂次的话定会有n & (n - 1) == 0这个关系成立 所以直接用 ...