1、文件描述符

对于内核来说,所有打开的文件都通过文件描述符来引用。文件描述符是一个非负整数。当打开一个现有的文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,使用open或creat返回文件描述符描述符标识该文件,将其作为参数传递给read或者write函数。通常文件描述符0与进程的标准输入关联、文件描述符1与进程的标准输出关联、文件描述符2与进程的标准错误相关联。但是在POSIX标准中,应该把他们替换成符号常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO以提高可读性,这些常量通常在头文件<unistd.h>中。

2、函数open说明

转自 https://blog.csdn.net/dangzhangjing97/article/details/79631173 仅供个人学习使用

查看相关man page使用命令man 2 open (如果出现 No manual entry for open in section 2,则需要使用 yum install man-pages命令(centos下)下载)。

函数原型说明:

 头文件:#include<fcntl.h>
功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)
 int open(const char*pathname, int flags);
int open(const char*pathname, int flags, mode_t mode);
参数说明:
()pathname
要打开或创建的目标文件
().flags
打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成falgs
参数:
()这三个常量,必须指定一个且只能指定一个
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开 ()下列常量是可选的(总共有数十个,这里给出最常用的2个):
O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容

返回值说明:

 成功:返回新打开的文件描述符,通常大于等于3
失败:返回-
open返回的文件描述符一定是最小的而且没有被使用的

函数fopen与函数open的区别:

 以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回。

3、函数close说明

函数原型说明:

 头文件:#include<unistd.h>
功能:关闭一个已经打开的文件
int close(int fd)
参数说明:fd:是需要关闭的文件描述符

函数返回值说明:

 成功:返回0;
失败:返回-,并设置errno

注意:打开的文件描述符要进行关闭操作,否则会占用大量资源,导致内存不够用。

4、程序举例

(1)使用open函数以写的形式打开一个已经存在的空文件myfile

程序截图:

运行结果截图:

(2)使用open函数以读写的形式打开一个已经存在的文件myfile

程序截图:

运行结果截图:

(3)使用open函数以写的形式打开一个不存在的文件file

程序截图:

运行结果截图:

【APUE】第3章 文件I/O (1)的更多相关文章

  1. APUE第4章 文件和目录

    4.2 文件函数 #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict b ...

  2. apue 第4章 文件和目录

    获取文件属性 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(c ...

  3. apue第七章学习总结

    apue第七章学习总结 1.main函数 程序是如何执行有关的c程序的? C程序总是从main函数开始执行.main函数的原型是 int main(int argc,char *argv[]); 其中 ...

  4. apue第六章学习总结

    apue第六章学习总结 1.关于阴影文件与口令 在口令文件当中,常见的字段有(以root为例): root(用户名):x(加密口令):0(uid):0(gid):root(注释字段):/root(用户 ...

  5. apue第四章学习总结

    apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...

  6. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. perl5 第五章 文件读写

    第五章 文件读写 by flamephoenix 一.打开.关闭文件二.读文件三.写文件四.判断文件状态五.命令行参数六.打开管道 一.打开.关闭文件   语法为open (filevar, file ...

  8. 零基础学Python--------第10章 文件及目录操作

    第10章 文件及目录操作 10.1 基本文件操作 在Python中,内置了文件(File)对象.在使用文件对象时,首先需要通过内置的open() 方法创建一个文件对象,然后通过对象提供的方法进行一些基 ...

  9. APUE学习笔记3_文件IO

    APUE学习笔记3_文件IO Unix中的文件IO函数主要包括以下几个:open().read().write().lseek().close()等.这类I/O函数也被称为不带缓冲的I/O,标准I/O ...

  10. 第四章 文件的基本管理和XFS文件系统备份恢复 随堂笔记

    第四章 文件的基本管理和XFS文件系统备份恢复 本节所讲内容: 4.1 Linux系统目录结构和相对/绝对路径. 4.2 创建/复制/删除文件,rm -rf / 意外事故 4.3 查看文件内容的命令 ...

随机推荐

  1. struts,hibernate,spring配置时问题汇总及解决办法

    1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...

  2. mongo学习-固定集合

    一.创建固定集合 db.createCollection("guding",{"capped":true,"size":10,"m ...

  3. 跟微软保持适当距离--Hessian + .net 实现RPC体系的企业应用

    同在一个产业链园区的XX厂因为5台Window2003服务器收到了律师函并且被迫下了12万$的采购单,虽然100万对XXX厂来数不是大数目,但是总有种被打劫的感觉. 在企业ERP应用中服务层一般都是做 ...

  4. UVa 1599 Ideal Path (两次BFS)

    题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...

  5. UVa 10118 Free Candies (记忆化搜索+哈希)

    题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果, 那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走 ...

  6. Linux驱动框架之misc类设备驱动框架

    1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...

  7. 层层递进Struts1(五)之处理流程

    这篇博客我们深入Struts框架执行部分源码,从ActionServlet的process函数开始,看一下其内在的执行过程. 流程图 以下流程图展示的是ActionServlet和RequestPro ...

  8. svn cleanup失败解决方法

    一般网上给出的解决方法是使用sqlite清空.svn\wc.db的工作队列表(work_queue) 后来发现都打不开wc.db 百度一下: 保留当前目录源码,删除 .svn(隐藏)文件夹,重新che ...

  9. EBS单实例上所有正在运行的并发请求以及请求目前的状态

    --EBS单实例上所有正在运行的并发请求以及请求目前的状态---一个实例上运行的所有并发请求的总结和他们目前的状态以及等待状态    select w.seconds_in_wait "Se ...

  10. Python学习-9.Python函数定义

    先定义一个最基本的函数作为例子: def Print(msg): print(msg) 函数名为Print,参数有一个,为msg,函数体调用print系统函数,输出msg. 接下来就是可变参数,这个特 ...