- 外文名
- file descriptor
- 作 用
- 内核利用文件描述符来访问文件
- 中文名
- 文件描述符
- 形 式
- 非负整数
-
2019-09-11 20:09:40
文件描述符的概念
文件描述符是什么?
文件描述符是一个非负的索引值(一般从3开始,0、1、2已经被使用),指向内核中的 “文件记录表”,内核为进程中要打开的文件维护者一个“文件记录表;- 当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符(内核记录表某一栏的索引);
- 当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
- Linux 下所有对设备和文件的操作都使用文件描述符来进行。
常见的文件描述符类型
一个进程启动时,会默认打开三个文件–标准输入、标准输出和标准出错处理。
- 0:表示标准输入,对应宏为:
STDIN_FILENO
,函数scanf()
使用的是标准输入; - 1:表示标准输出,对应宏为:
STDOUT_FILENO
, 函数printf()
使用的是标准输出; - 2:表示标准出错处理,对应的宏为:
STDERR_NO
; - 你也可以使用函数
fscanf()
和fprintf()
使用不同的 文件描述符 重定向进程的I/O
到不同的文件。
需要使用文件描述符的函数
- 若要访问文件,而且调用的函数又是
write
、read
、open
和close
时,就必须用到文件描述符(一般从3开始)。 - 若调用的函数为
fwrite
、fread
、fopen
和fclose
时,就可以绕过直接控制文件描述符,使用的则是与文件描述符对应的文件流。
更多相关内容 -
linux中通过文件描述符获取文件绝对路径的方法
2021-01-20 15:21:19在linux中,有时候我们只知道文件描述符却不知道它的名字及其完整的路径,如果我们想获取其路径该怎么办呢?其实很简单,在linux中每个被打开的文件都会在/proc/self/fd/目录中有记录,其中(/proc/self/fd/文件描述... -
fd:Swift文件描述符套接字库
2021-05-28 12:49:50fd:文件描述符 Swift文件描述符库。 fd是基础系统文件描述符和套接字API之上的最小层。 用法 FileDescriptor FileDescriptor是包含单个属性(fileNumber)的协议。 protocol FileDescriptor { var fileNumber: ... -
linux下文件描述符的查看及分析
2021-05-11 19:48:48起因近期在调试一个Android播放内核是遇到上层传递的是fd(file descriptor),但是在文件播放结束之后调用lseek却提示返回-1,errno=29(#define ESPIPE 29 /* Illegal seek */)。好吧。那就确定下原因。在网上搜到有...起因
近期在调试一个Android播放内核是遇到上层传递的是fd(file descriptor),但是在文件播放结束之后调用lseek却提示返回-1,errno=29(#define ESPIPE 29 /* Illegal seek */)。
好吧。那就确定下原因。
在网上搜到有说lseek存在问题,“对于已经到达EOF的stream,使用lseek是不能让stream再次可读的”。具体参考Android NDK之fseek, lseek。随即写了个命令行程序,在android shell下验证了下,经过验证是可以的。那就继续找吧。
最终发现一个有趣的现象,Android的MediaServer传递的fd只能在调用时使用,之后就被复用了,指针都改变了。具体发现的方法就是本文描述的内容。
文件操作
文件操作比较通用的就是C库的FILE(带缓冲的文件流),也就是常用的fopen, fclose, fprintf, fscanf, fseek, fread, fwrite等函数。这里面比较核心的概念是FILE结构,这是C库提供的跨平台的文件操作函数,多数情况下是封装了系统内核提供的文件读写函数,比如在windows下是CreateFile, CloseFile, OpenFile, WriteFile, ReadFile等函数,在linux下是open, close, lseek, read, write等内核API。
在linux下内核API主要提供了基于文件描述(FD,file descriptor)的文件操作机制,注意FD默认是非负的,通常0-stdin、1-stdout、2-stderr。
先看看如何实现FILE到fd的转换,函数fileno可以实现这种转换,原型如下:
int fileno(FILE *stream);
那么fd如何转换为FILE呢? 函数fdopen可以基于FD打开文件,原型如下:
FILE *fdopen(int fd, const char *mode);
那么如何通过fd拿到文件原始路径呢? 函数readlink提供了这种机制,可以参考下面代码
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
FILE * stream = fopen(__FILE__, "rb");
if (NULL == stream)
{
printf("open %s failed\n", __FILE__);
return -1;
}
int fd = fileno(stream);
char buf[4096] = {0};
// read to file end
while (read(fd, buf, sizeof(buf)) > 0);
// test whether lseek is ok in EOF
off_t offset = lseek(fd, 0, SEEK_CUR);
printf("lseek ret %d err_no %d\n", offset, errno);
// read file path from fd
char path[PATH_MAX] = {0};
snprintf(path, sizeof(path), "/proc/%d/fd/%d", getpid(), fd);
memset(buf, 0, sizeof(buf));
int buf_size = readlink(path, buf, sizeof(buf));
if (buf_size < 0)
{
printf("readlink() ret %d error %d\n", buf_size, errno);
}
else
printf("readlink() returned '%s' for '%s'\n", buf, path);
getchar();
if (NULL != stream)
fclose(stream);
return 0;
}
原理很简单,linux下的fd就是一个链接,可以通过/proc/pid/fd读取到相关信息。
比如上面那个程序的输出如下:
/proc/11203/fd$ ll
总用量 0
dr-x------ 2 root root 0 4月 1 15:48 ./
dr-xr-xr-x 9 root root 0 4月 1 15:48 ../
lrwx------ 1 root root 64 4月 1 15:48 0 -> /dev/pts/22
lrwx------ 1 root root 64 4月 1 15:48 1 -> /dev/pts/22
lrwx------ 1 root root 64 4月 1 15:48 2 -> /dev/pts/22
lr-x------ 1 root root 64 4月 1 15:48 3 -> /home/tocy/project/test.cpp
总结
了解下系统提供的文件操作接口还是不错的,以后遇到问题最起码知道去哪里跟踪。
主要参考:
Linux下文件描述符
http://blog.csdn.net/kumu_linux/article/details/7877770 文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的 ...
linux下文件描述符的介绍
当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符.所谓的文件描述符是一个低级的正整数.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出( ...
[ 总结 ] Linux 下文件描述符
1.概述: 文件描述符是内核为了高效管理已被打开的文件所创建的索引.是一个非负整数,用于代指被打开的文件.所有通过I/O操作的系统调用都通过文件描述符. 文件描述符用以表明每一个被进程所打开的文件和s ...
linux 最大文件描述符fd
使用四种框架分别实现百万websocket常连接的服务器 著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务 ...
Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...
【详解】Linux的文件描述符fd与文件指针FILE*互相转换
使用系统调用的时候用文件描述符(file descriptor,简称fd)的时候比较多,但是操作比较原始.C库函数在I/O上提供了一些方便的包装(比如格式化I/O.重定向),但是对细节的控制不够. 如 ...
Linux的文件描述符
(1).文件描述符的定义 文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符:文件描述符是一个简单的非负整数,用以表明每个被进程 ...
对于Linux中文件描述符的疑问以及解决
问题 每次web服务器或者是几乎所有Linux服务器都需要对文件描述符进行调整,我使用ulimit -n来查看当前用户的最多能打开的文件,默认设置的是1024个,但是系统运行起来以及开启一些简单的 ...
Linux中文件描述符fd和文件指针flip的理解
转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通 ...
随机推荐
MySQL热备脚本
MYSQL 备份方法: 热备: http://blog.itpub.net/27099995/viewspace-1295099/ http://blog.csdn.net/dban ...
MyEclipse SVN 插件
一.下载SVN插件subclipse 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 在打开的网 ...
Knockout 是什么?
翻译:Knockout 轻松上手 - 1 Knockout 是什么? 原文名称:KnockoutJS Starter Knockout 是一个非常棒的脚本库,可是我发现许多人并不了解它,所以,思胜翻译 ...
Beta冲刺 第四天
Beta冲刺 第四天 1. 昨天的困难 1.网页使用了一些网上现成的模板,其主要是使用像素做处理的,所以检查起来比较费事费力. 2.使用github代码merge时出现了问题.所以花费了不少的时间在人 ...
寻找复杂背景下物体的轮廓(OpenCV / C++ - Filling holes)
一.问题提出 这是一个来自"answerOpenCV"(http://answers.opencv.org/question/200422/opencv-c-filling-hol ...
Flashbuilder的bug FlashBuilder 1119: 访问可能未定义的属性 on (通过 static 类型
FlashBuilder 1119: 访问可能未定义的属性 on (通过 static 类型 当此问题出现的时候 无论 刷新 清理 注释 删除 乃至重启电脑都无济于事. 解决方法:备份此类到另外一个地 ...
appium多机并行测试
在实际应用中需要对多个机型并行测试,节省时间 多机测试的思路 启动多个appium server与多台机器交互(android和ios均可) 注意:一定要使用node安装appium的命令行,使用 ...
Android Studio关于USB device not found的解决的方法
Android Studio关于USB device not found的解决的方法 我们使用Android Studio进行Android开发时.当我们使用真机进行调试时.非常可能会出现USB de ...
HBase & thrift & C++编程
目录 目录 1 1. 前言 1 2. 启动和停止thrift2 1 2.1. 启动thrift2 1 2.2. 停止thrift2 1 2.3. 启动参数 2 3. hbase.thrift 2 3. ...
对特殊字符编码js与c#中的处理方法
js: encodeURIComponent();编码 c#: Uri.UnescapeDataString();解码
-
到底什么是文件描述符???
2021-10-28 10:10:51文件描述符1、文件描述符的引入1.1 系统调用接口的引入1.2 文件描述符2、文件描述符2.1 演示文件描述符2.2 文件描述符的返回值2.3 文件描述符底层原理(重点)2.3 文件描述符修饰规则3、总结 1、文件描述符的引入 ...文件描述符
1、文件描述符的引入
1.1 系统调用接口的引入
不管是学习语言还是学习操作系统,IO流是我们学习过程中不可获取的一个阶段,在这一部分我们会学习打开文件、读写文件等操作,在C语言中我们打开文件调用的是C语言的库函数接口,像fopen打开,fclose关闭,fputs写入,fgets读取,这些都是在C中我们对文件进行操作的一些库函数,但是如果不允许使用库函数接口时我们应该怎么办???
这时候我们就应该使用系统调用相关接口,我们首先要明确一个概念,C语言接口和操作系统接口是上下级的关系,任何一个语言,不管是C、C++、java、Python都有自己打开文件关闭文件读写文件的库函数,但是这些库函数的使用都是在Linux和Windows系统下进行的,所以任何语言的接口和系统接口是一种上下级的关系。
在系统调用接口中,我们打开文件使用open、关闭文件close、写入write、读取read。那这些接口和C中库函数接口有什么联系呢?我们可以这样理解:C中调用得这些库函数底层一定封装了系统调用接口,可以认为fopen底层调用open,fclose底层调用close,fread底层调用read,fwrite底层调用write。我们在windows中打开文件,windows底层也有一套自己的windows相关的api系统接口,当我们在windows使用C的库函数时,C调用的就是windows下的系统接口。这样在语言层面上就实现了跨平台性。
1.2 文件描述符
我们查看关于C语言中库函数和系统调用相关接口的使用手册。
图中我们给出了C和系统调用的相关接口的使用手册,我们发现C中库函数的类型为FILE*,系统调用接口的类型为int。
FILE*是文件指针,在C中打开一个文件,打开成功后会返回一个文件指针,该指针指向文件内容的起始地址,文件指针是C语言级别的概念;int fd本质是new file descriptor-文件描述符,文件描述符是系统级别的概念。2、文件描述符
2.1 演示文件描述符
光说不练假把式,我们写一份代码来实质性的感受一下文件描述符的概念。
通过上图中,我们就可以观察到了fd的值,但是fd的值为-1,-1意思是这个文件不让我们创建不让我们打开,这是因为单纯的O_WRONLY是没有创建功能的,所以如果你想打开一个文件写入,并且文件不存在想创建的话需要扩加一个选项O_CREAT。图1 代码
图2 运行结果
其实OS系统的open接口的O_WRONLY+O_CREAT组合起来就是C语言接口中的w方式,因为他们是上下级的关系,所以fopen一定调用了open,即C语言中的w方式底层同时给open函数传入了两个参数:O_WRONLY+O_CREAT。图1 代码
图2 运行结果
2.2 文件描述符的返回值
刚才我们打开一个文件fd为3,那么我们创建多个是什么情况呢?
我们发现返回值从3开始依次递增,有很强的规律性;而-1代表打开文件失败,那么012在哪呢?又代表什么?图1 代码
图2 运行结果
相信各位读者应该都听过一个概念,C语言程序会默认打开3个输入输出流,其中这三个输入输出流对应的名为stdin,stdout,stderr,文件类型为FILE*,而FILE*是C语言的概念,底层对应的文件描述符,其中stdin对应0,stdout对应1,stderr对应2,换言之012被默认已经打开了,再打开时就是从3开始打开了,所谓的文件描述符,本质其实就是数组下标。
2.3 文件描述符底层原理(重点)
一个进程是可以可以打开多个文件的,无非就是多调用几次open,而我们的计算机中是同时存在大量进程的,而这些进程可能会打开各种各样的文件,所以系统中在任何时刻都可能存在大量已经打开的文件,操作系统的功能之一就是文件管理,就是要对这些打开的文件进行管理。
而我们都知道,所谓管理就是先描述再管理,底层中描述文件的数据结构叫做struce file,一个文件对应一个struct file,大量的文件就有大量的struct file,我们只需将这些数据结构用双链表连接起来,所以对文件的管理就变成了对双链表的增删改查。而我们现在要做的,这些已经被打开的文件那些文件属于某个特定的进程,就需要建立进程和文件的对应关系。
每一个进程都有一个task_strut,这个task_struct会指向一个struct files_struct结构体,这个结构体里会有一个指针数组struct file* fd_array[32],而这个指针数组就是文件描述符对应的数组。
既然是数组就有下标,下标从0开始依次递增,task_struct结构里会有一个指针变量指向这个struct files_struct结构体,我们这个指针数组中的每个数据都是一个指针变量。默认的3个文件+我们上面的例子中自己打开的log.txt,总共有4个文件描述符打开,这四个打开的文件描述符都对应一个struct file的结构体,结构体里有描述该文件属性的相关信息,而这些struct file文件结构体之间,是通过双链表的形式链接起来的。
对于输入输出错误,将下标012分配给他们,自己打开的文件从3开始依次分配,当我们将下标和struct file结构体的指向关系表明清楚以后,open函数返回时,就会将下标数字直接返回给调用方,至此在应用层我们就拿到了文件描述符,至此我们就完成了文件和进程的对应关系。所以,所谓的文件描述符实际就是数组的下标。
2.3 文件描述符修饰规则
文件描述符的分配规则:在files_struct数组当中,找到当前没有被使用的最小的一个下标,作为新的文件描述符。(其实就是将数组从上到下扫描,找没有被使用的)
3、总结
通过上面的学习,我们知道了文件描述符就是一个小整数,Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2.;0,1,2对应的物理设备一般是:键盘,显示器,显示器。
而每当我们打开一个新的文件时,系统就会将文件描述符对应的指针数组从上而下进行扫描,找到没有被使用的作为该文件的文件描述符。
-
socket 文件描述符
2021-10-21 15:27:17文件描述符:window中叫文件句柄;可以理解成分配的ID socket经过创建的过程中才会被分配文件描述符 文件操作 打开文件 int open(const char *path, int flag),flag是打开的模式,多个模式用OR连接,返回的就是...Linux中,socket 也是被认为是文件的一种
window中,需要区分socket和文件
- 文件描述符:window中叫文件句柄;可以理解成分配的ID
- socket经过创建的过程中才会被分配文件描述符
文件操作
- 打开文件
int open(const char *path, int flag)
,flag是打开的模式,多个模式用OR连接,返回的就是文件描述符。(#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>) - 关闭文件
int close(int fd)
,这个同样可以关闭socket。(#include <unistd.h>) - 将数据写入文件:
ssize_t write(int fd, const void *buf, size_t nbytes);
,(#include <unistd.h>) - size_t 是 unsigned int,ssize_t 是 signed int
读写文件操作
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> void error_handling(char *message); int main(void) { int fd; char buf[] = "Let's go! \n"; // 设置权限 umask(0000); if(creat("data.txt", 0777) == -1) error_handling("creat() error\n"); // 写入数据 fd = open("data.txt", O_CREAT|O_WRONLY|O_TRUNC); if(fd == -1) error_handling("write open() error\n"); printf("file descriptor %d\n", fd); if(write(fd, buf, sizeof(buf)) == -1) error_handling("write() error\n"); printf("write over.\n"); close(fd); // 读取数据 fd = open("data.txt", O_RDONLY); if(fd == -1) error_handling("read open() error\n"); char read_buf[100]; if(read(fd, read_buf, sizeof(read_buf)) == -1) error_handling("read() error\n"); printf("file data is %s\n", read_buf); close(fd); return 0; } void error_handling(char *message) { perror(message); exit(1); }
注:
- 如果提示没有权限,可以参考 Permission denied: https://blog.csdn.net/aicamel/article/details/80922459,在创建文件的时候,设置权限
- 这些文件IO操作同样适用于socket
- 文件描述符从3开始,从小到大编号,因为0、1、2被分配给了标准IO描述符
同时创建文件和套接字,打印出对应的文件描述符
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/socket.h> #include <sys/stat.h> void error_handling(char *message); int main(void) { int fd1, fd2, fd3; char *file_name = "data.dat"; // 设置权限 umask(0000); if(creat(file_name, 0777) == -1) error_handling("creat() error\n"); fd1 = socket(PF_INET, SOCK_STREAM, 0); fd2 = open(file_name, O_CREAT|O_WRONLY|O_TRUNC); fd3 = socket(PF_INET, SOCK_STREAM, 0); printf("file descripor 1: %d\n", fd1); printf("file descripor 2: %d\n", fd2); printf("file descripor 3: %d\n", fd3); close(fd1); close(fd2); close(fd3); return 0; } void error_handling(char *message) { perror(message); exit(1); }
其他:
- 常用的flag常量值:只读(O_RDONLY),只写(O_WRONLY),读写(O_RDWR),必要时创建文件(O_CREAT),删除现有数据(O_TRUNC),追加模式(O_APPEND)
- 0、1、2文件描述符分别是标准输入、输出、错误
-
Linux中文件描述符的理解(文件描述符、文件表项、i-node)
2019-07-04 19:03:50就像windows中的句柄一样,学习linux经常会碰到文件描述符,我们都知道文件描述符是一个非负整数,每一个文件描述符都唯一对应了一个打开的文件,那么文件描述符在内核中到底是以什么形式存在的呢? 这个问... -
多进程中之文件描述符继承的消除
2021-02-07 10:04:33什么是文件描述符的继承 当父进程创建子进程时,无论 fork 函数或者是 vfork 函数,子进程通常都会继承父进程的文件描述符。所谓的继承,就是子进程可以使用相同的文件描述符,和父进程操作同一个文件对象。如图所... -
Linux中进程间传递文件描述符的方法
2020-10-12 20:08:21在进行fork调用后,由于子进程会拷贝父进程的资源,所以父进程中打开的文件描述符在子进程中仍然保持着打开,我们很容易的就将父进程的描述符传递给了子进程。但是除了这种情况下,如果想将某个父进程在子进程创建后... -
Linux详解 --- 系统文件IO操作与文件描述符
2021-12-10 08:37:01Linux中的IO操作(思维导图一览) 语言IO操作与系统IO操作 文件描述符详解与底层结构 -
文件描述符与inode的关系
2022-04-09 16:32:11文件描述符 Linux中,文件描述符(File descriptor,fd),是表示指向文件的引用的抽象化概念,在形式上是一个非负整数,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符 下面open系统调用返回一个... -
文件描述符、文件描述符表、目录项、索引节点之间的总结联系
2019-05-22 18:02:28文件控制块(目录项/FCB):用来存放控制文件需要的各种信息的数据结构,以...文件描述符:open打开文件到的是一个文件描述符(索引号),存放在task_struct数据结构(进程控制块)中,将task_struct结构和file结构... -
Linux 文件描述符与重定向
2022-04-06 12:40:111.什么是文件描述符 文件描述就是打开文件内核数据结构,返回给用户的一个整数。 #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<... -
文件描述符与socket连接
2019-04-22 16:01:20文件描述符与socket连接 每个进程开启一个soeket连接,都会占用一个文件描述符。 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。 文件描述符(file ... -
05_父子进程_文件描述符
2020-07-21 17:59:41有umask函数可以调用 文件描述符表,包含很多指向file结构体的指针。 每个进程都有一个属于自己的文件描述符表 和信号相关的信息。 用户id和组id。 进程是哪个用户下启动的就属于哪个用户 有对应的api函数可以获取... -
彻底弄懂 Linux 下的文件描述符(fd)
2020-08-14 17:01:52Linux下 文件描述符(fd) -
【Linux】浅谈文件描述符和重定向
2022-02-26 22:00:08浅谈文件描述符和重定向 -
Linux文件描述符到底是什么?
2019-04-21 15:19:19一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个编号(一个 ID),这个编号就是一个整数,被称为文件描述符(File Descriptor)。这只是一个形象的比喻,为了让... -
linux修改进程最大文件描述符
2022-03-11 14:28:24文件描述符分为系统级、用户级、进程级,以下演示如何修改进程最大文件描述符 查看某个进程的最大文件描述符数 cat /proc/{pid}/limits 可以看到 “MAX open files”为100002,这里因为之前修改过,一般进程默认文件... -
浅谈文件描述符及文件系统
2017-12-17 14:57:01之前在讲IO操作的时候,其中系统级IO中的open,write,read,close都用到了文件描述符(file descriptor),其中open的返回值为文件描述符,write、read和close都是在传参的时候需要传文件的文件描述符。那么,文件... -
3-文件描述符和标准文件
2018-06-24 23:41:43对于内核来说,所有打开的文件都通过文件描述符(file descriptor)来进行管理引用,文件描述符是一个非负整数,当打开一个文件或新建一个文件时,内核会向进程返回一个文件描述符,当所有对文件进行读写操作的read/... -
linux之文件描述符
2018-11-23 17:34:51写在前面,linux的描述符有进程描述符、文件描述符、内存描述符。首先标题想了很久linux的描述符从哪里说起,看了几份资料后还是决定从进程描述符说起。但是此文章还是重点说的是文件描述符。知识深度有限,如有错误... -
文件描述符(多进程对同一个文件操作)
2019-05-18 09:22:43进程描述符:filedescrption,包含很多执行file结构体的指针 当我们打开一个文件的时候: int fd = open(); 返回的fd对应着一个结构体,file_struct{ ... } 内核中文件结构体中的内容: struct file { ... -
文件描述符fd
2018-10-21 15:34:19文件描述符 在linux中open函数调用成功后会返回一个非负整数,这个非负整数就是文件描述符。 Linux 默认情况下会缺省打开三个文件描述符 标准输入0 标准输出1 标准错误2 0 1 2 对应的物理设备一般是: 键盘 显示器 ... -
linux文件描述符限制及使用详解
2018-09-02 11:26:36linux系统中通常会对每个进程所能打开的文件数据有一个限制,当进程中已打开的文件描述符超过这个限制时,open()等获取文件描述符的系统调用都会返回失败。 linux下最大文件描述符的限制有两个方面,一个是用户级... -
查看进程打开的文件描述符
2019-10-24 08:58:59所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。... -
Android Binder传递文件描述符原理分析
2018-10-29 11:30:16Android Binder传递文件描述符原理分析前言问题描述问题原因 前言 Binder是Android中最常用,最重要的进程间通信机制。我们知道,Binder不仅可以传递普通的数据,还可以传递文件描述符。本文尝试分析Binder传递文件... -
文件描述符到底是啥?
2020-05-21 09:00:00在平时的 Android 开发中,你与文件描述符打过交道吗?一些知识点会涉及到文件描述符,比如:mmap 函数的文件描述符参数epoll 机制对文件描述符的限制这时,如果让你说说对文件描...