热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

socket文件描述符,linux查看文件描述符

打开现存文件或新建文件时,内核会返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作


Linux内核(kernel )使用文件描述符(file descriptor )访问文件。 文件描述符是非负整数。 打开现有文件或创建新文件时,内核会返回文件描述符。 在Linux系统上,读写文件时也必须使用Linux文件描述符来指定要读写的文件。


实际上,文件描述符是指向内核为每个进程维护的进程打开的文件的记录表的索引值。 当程序打开现有文件或创建新文件时,内核会向进程返回文件描述符。 在编程中,基本编程经常围绕文件描述符展开。 但是,文件描述符这个概念大多只适用于UNIX和Linux这样的操作系统。


以前,“标准输入”的Linux文件描述符为0,“标准输出”为1,“标准错误”为2。 虽然此习惯不是Unix内核的特性,但由于shell和许多APP应用程序都使用此习惯,因此如果内核不遵循此习惯,许多APP应用程序将无法使用。 因此,大多数Linux系统调用都依赖于Linux文件描述符。


首先说files。 文件指针的数组。 通常,进程从files[0]读取输入,将输出写入files[1],并将错误消息写入files[2]。


例如,从我们的角度来看,c语言的printf函数会在命令行打印字符,但从流程的角度来看,它会将数据写入files[1]。 同样,scanf函数是进程尝试从名为files[0]的文件中读取数据。


创建每个进程后,files的前三位用缺省值填充,分别指向标准输入流、标准输出流和标准错误流。 常见的“文件描述符”是指此文件指针数组的索引,因此程序的文件描述符缺省为0输入、1输出、2错误。


进程获取文件描述符的最常见方法是从本地子例程open或create中获取,或者从父进程继承。 通过后一种方法,子进程也可以访问父进程使用的文件。 文件描述符通常对于每个进程是唯一的。 当您使用fork子程序创建子流程时,子流程会获取父流程的所有文件描述符的副本,这些文件描述符将在fork运行时打开。 从fcntl、dup或dup2子程序复制或复制流程时,也会发生相同的复制流程。


对于每个进程,操作系统内核都会在u_block结构中维护一个文件描述符表,所有文件描述符都会在该表中创建索引。 到了这里,我就明白了“Linux上的所有文件”的设计构想的巧妙之处。 无论是设备、其他进程、套接字还是真实文件,都是可读写的,可以合并到一个简单的文件数组中。 进程通过简单的文件描述符访问相应的资源,具体细节传递给操作系统,有效地解除绑定,美观高效。


实际上,Linux文件描述符被视为系统资源,可以使用适当的命令显示文件描述符的上限。 每个文件描述符对应于一个打开的文件,而不同的文件描述符也指向同一个文件。 本网站的Linux教程详细介绍了Linux文件描述符的使用。 想马上掌握Linux文件描述符的人请去看看。


推荐阅读
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼*madebyebhrz*#include#include#include#include#include#include#include ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
author-avatar
八卦男1002_426
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有