文件描述符

Linux文件IO操作函数概述

早过忘川 提交于 2020-01-12 09:40:43
文件概述 Linux中,一切皆文件。文件为操作系统服务和设备提供了一个简单而一致的接口。这意味着程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。 也就是说,大多数情况下,你只需要使用5个函数: open、close、read、write和ioctl。 例外的情况: 目录的读写,网络连接等特殊文件 目录 文件通常由两部分组成: 内容 + 属性,即管理信息,包括文件的创建修改日期和访问权限等。属性均保存在 inode 节点中。inode - "索引节点",储存文件的元信息,比如 文件的创建者、文件的创建日期、文件的长度和文件在磁盘上存放的位置等等。每个inode都有一个号码,操作系统用inode号码来识别不同的文件。ls -i 查看inode 号。 目录是用于保存其他文件的节点号和名字的文件,每个数据项为指向文件节点的链接。如下图: 当文件链接数变为零,意味文件删除,磁盘空间变成可用空间。 文件和设备 三个重要的设备文件: /dev/console - 系统控制台。 /dev/tty - 访问不同的物理设备。 /dev/null - 空设备,向所有写这个设备的输出都将被丢弃。 设备驱动程序: 操作系统的核心部分,即内核,是由一组设备驱动程序组成。他们是一组对系统硬件进行控制的底层接口,为了向用户提供一个一致的接口,其封装了所有与硬件相关的特性。

学习muduo库(13)之evenloop类中wakeup()的概念

六眼飞鱼酱① 提交于 2020-01-12 01:41:53
预备知识: eventfd eventfd是Linux 2.6提供的一种系统调用,它可以用来实现事件通知。eventfd包含一个由内核维护的64位无符号整型计数器,创建eventfd时会返回一个文件描述符,进程可以通过对这个文件描述符进行read/write来读取/改变计数器的值,从而实现进程间通信。 #include <sys/eventfd.h> int eventfd(unsigned int initval, int flags); flags 可以是以下值的 OR 运算结果,用以改变 eventfd 的行为。 EFD_CLOEXEC (since Linux 2.6.27) 文件被设置成 O_CLOEXEC,创建子进程 (fork) 时不继承父进程的文件描述符。 EFD_NONBLOCK (since Linux 2.6.27) 文件被设置成 O_NONBLOCK,执行 read / write 操作时,不会阻塞。 EFD_SEMAPHORE (since Linux 2.6.30) 提供类似信号量语义的 read 操作,简单说就是计数值 count 递减 1。 在 Linux 2.6.26 版本之前,没有使用参数 flags,必须指定为 0。muduo库中设置为0 操作方法 一切皆为文件是 Linux 内核设计的一种高度抽象,eventfd 的实现也不例外

python0.11-----文件/编码和解码/pickle模块

元气小坏坏 提交于 2020-01-11 23:30:55
文件: python中的文件读写和c兼容,磁盘上的读写由操作系统完成,一般的程序无法操作磁盘。文件读写是通过操作系统对象完成,该对象称为文件描述符。 文件的操作分两种: 1.打开文件 open(path,flag[,encoding][,errors]) path:要打开文件的路径。 flag:打开方式。   r:以只读的方式打开文件。文件的(描述符)指针放在文件开头。   rb:以二进制格式打开一个文件用于只读,文件描述符放在文件开头。   r+:打开一个文件用于读写,文件描述符放到开头。   w:打开文件只用于写入。若文件已经存在则会被覆盖,若文件本身不存在,则会创建新文件。   wb:打开一个文件只用于写入二进制。若文件已经存在则会被覆盖,若文件本身不存在,则会创建新文件。   w+:打开一个文件用于读写。若文件已经存在则会被覆盖,若文件本身不存在,则会创建新文件。   a:打开一个文件用于追加。如果文件存在,文件描述符将会放到文件末尾。若文件本身不存在,则会创建新文件。   a+:打开一个文件用于读写。如果文件存在,文件描述符将会放到文件末尾。若文件本身不存在,则会创建新文件。注意:因为文件描述符放在文件末尾,因此,读文件读不出来什么东西。 encoding:编码方式。 errors:错误处理方式,'ignore'表示若编码和解码方式不一致不会报错,'strict

Linux 输入输出(I/O)重定向

落爺英雄遲暮 提交于 2020-01-11 15:58:56
目录 1、概念 Linux 文件描述符 2、输出重定向 格式 示例 注意 3、输入重定向 格式 示例 4、自定义输入输出设备 解释 示例 最后说两句 1、概念 在解释什么是重定向之前,先来说说什么是文件描述符 Linux 文件描述符 文件描述符可以理解为 Linux 系统为文件分配的一个数字,范围是 0-3 ,用户也可以自定义文件描述符,但是自定文件描述符不在这里的讨论范围 文件描述符(file descriptor) 名称 类型 文件描述符 操作 标准输入 standard input 0 <,<< 标准输出 standard output 1 >,>> 标准错误输出 standard error output 2 2>,2>> 文件描述符的存储位置位于 /proc/self/fd ,文件描述符是通过一系列软链接指向的默认输出设备,这里我们的默认设备就是模拟终端 模拟终端的文件可以使用命令 tty 来查看 [divent@bash]$ ls -al /proc/self/fd total 0 lrwx------. 1 divent divent 64 Aug 15 14:09 0 -> /dev/pts/0 lrwx------. 1 divent divent 64 Aug 15 14:09 1 -> /dev/pts/0 lrwx------. 1 divent

FileDescriptor

江枫思渺然 提交于 2020-01-11 13:56:42
FileDescriptor 在java中的java.io包下面   1 public final class FileDescriptor { 2 。。。 3 } 官方的解释:   文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream 。   一坨~~~看不明白~    在wiki中的描述   是一个用于表述指向 文件 的引用的抽象化概念。在形式上是一个非负整数。实际上,它是一个索引值,指向 内核 为每一个 进程 所维护的该进程打开文件的记录表。 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。 在 程序设计 中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX 、 Linux 这样的操作系统。    基于上面filedescriptor在java中,是当应用程序打开一个文件或者建立一个socket连接的时候,内核返回给应用程序一个非负的整数(In,out,err,分别为0,1,2),使用这个称之为filedescriptor的东西来实现对文件或者socket的操作。   【一网友的解释】【赞】

java io系列09之 FileDescriptor总结

大兔子大兔子 提交于 2020-01-11 07:40:58
本章对FileDescriptor进行介绍 转载请注明出处: http://www.cnblogs.com/skywang12345/p/io_09.html FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以 FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。 但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建 FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口

FileDescriptor介绍及使用

一笑奈何 提交于 2020-01-11 02:31:48
FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口(因为out本质是FileDescriptor对象,而FileDescriptor没有输出接口)。怎么办呢? 很简单,我们创建out对应的“输出流对象”,然后通过“输出流”的write(

linux shell 基础语法B

岁酱吖の 提交于 2020-01-10 18:39:26
接着之前的内容继续讲shell编程的基础。 这部分还是先要巩固重定向的使用,以及创建自己的文件描述符,在编写shell脚本中关注临时重定向和永久重定向的用法。 (1)< << (2)> >> 为了区分如上的重定向符号,大家搞懂以下2个例子就行: cat > file <<eof; cat >> fileA <fileB 实际使用中输入重定向还是比较少,多数是输出重定向 &> 表示stdout和stderr都重定向 对于文件描述符,我们不光要掌握0,1,2,还要能够自己创建自己的文件描述符,且在shell编程中与默认的标准文件描述符进行组合使用。比如说要恢复文件描述符就是一个例子。 exec 3 >&1 exec 1> testfile ... ... exec 1>&3 ... ... 以上是输出重定向的恢复,输入重定向如下 exec 6 <&0 exec 0 <filein ... exec 0 <&6 关闭文件描述符 exec 3 >&- 还有一种<>读写文件描述符的,慎用,最好是读完后再重定向写入,不然shell维护的内部指针会把文件内容搞得很混乱。 创建临时文件和目录 mktemp file.XXXXXX mktemp -t 创建在/tmp下面且返回绝对路径 mktemp -d创建目录 tee的使用 tee -a 重定向讲完,再讲讲脚本的控制。脚本的控制主要是信号的处理。

java io系列09之 FileDescriptor总结

白昼怎懂夜的黑 提交于 2020-01-10 15:54:43
本章对FileDescriptor进行介绍 转载请注明出处: http://www.cnblogs.com/skywang12345/p/io_09.html FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口

FileDescriptor详解

天大地大妈咪最大 提交于 2020-01-10 06:57:50
FileDescriptor是"文件描述符". FileDescriptor可以被用来表示开放的文件,开放的套接字等. 当FileDescriptor表示文件来说,当FIleDescriptor表示某文件时,我们可以通俗的将FIleDescriptor看成该文件.但是,我们不能直接通过FIleDescriptor对该文件进行操作;若需要通过FIleDescriptor对该文件进行操作,则需要创建FileDescriptor对应的FileOutputStream,再对文件进行操作. in,out,err的介绍 in:标准输入(键盘)的描述符 out:标准输出(屏幕)的描述符 err:标准错误输出(屏幕)的描述符 他们三个的原理和用法都类似,下面通过out来进行深入的研究 out的作用和原理 out时标准输出(屏幕)的描述符,但是他有什么作用呢? 我们可以通俗理解,out 就代表了标准输出(屏幕).如我们要输出信息到屏幕,既可以通过out来操作,但是,out 有没有提供输出信息到屏幕的接口,怎么办呢? 很简单,我们创建Out对应的"输出流对象",然后通过"输出流"的write()等接口就可以输出信息到屏幕上去了. 1 public static void main(String[] args) throws IOException 2 { 3 FileOutputStream out