展开

关键词

Linux编程(文件描述符

Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备的时候,几乎都要通过它来达成的,它究竟是何方神圣呢?随我描述符科学家来一探究竟。 首先,我们在Linux下打开文件用的都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO的封装,归根结底还是使用 很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说的打开一个文件实际上最重要的是获取这个文件的描述符描述符是用来表征这个文件的代表物 内核空间中有一堆数据结构表达一个文件的属性信息,但是用户空间看不见,只看见一个代表了这些信息的整数i,通常我们称之为文件描述符,对文件的读写和ioctl操作都是通过这个东东来达到的呢!

61820

Linux 文件描述符详解

Overview 了解Linux怎样处理输入和输出是非常重要的。一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置。同样我们也可以更好地理解输入重定向和输出重定向。 Linux标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误输出 ---- Linux系统将所有设备都当作文件来处理,而Linux 其实我们可以想象我们电脑的显示器和键盘在Linux系统中都被看作是文件,而它们都有相应的文件描述符与之对应。 其实我们与计算机之间的交互是我可以输入一些指令之后它给我一些输出。 1>&6 vincent@geek:~/test$ cat test i love linux shell!!!1234 上面的命令很有意思:我首先把文件描述符6指向test文件。 命令如下: cat /dev/null > test1 ---- Linux使用/tmp目录来存放不需要一直保留的文件,大多数Linux系统会在启动时自动删除/tmp目录中所有的文件。

61430
  • 广告
    关闭

    腾讯云服务器买赠活动

    腾讯云服务器买赠活动,低至72元1年,买就送,最长续3个月,买2核送4核、买4核送8核

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核编程--文件描述符

    Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件的代码,需要借助文件描述符。 文件的索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。 文件描述符就是内核为了高效管理已被打开的文件所创建的索引值。 文件描述符指向内核为每一个进程维护的打开文件记录表。当要处理文件时,将文件对应的文件描述符作为参数传给函数。 文件描述符在用户进程和内核之间的映射关系: Linux中查看文件描述符的指令:lsof(list open files) lsof可以打开的文件: 普通文件 目录 网络文件系统的文件 字符或设备文件 11968 --通过某个进程号显示该进程打开的文件 lsof -i --列出所有的网络连接 lsof -i tcp --列出所有tcp 网络连接信息 *Linux

    11110

    Linux Linux下最大文件描述符设置

    系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 65535 说明: 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max 查看当前系统使用的打开文件描述符数 # cat /proc/sys/fs/file-nr 1280 0 0 113986 说明:第一个数表示当前系统已分配的文件描述符数(文件句柄数),第二个数为分配后已释放的文件描述符数 (当前不再使用的文件描述符数),第三个数为最大文件描述符数,等于file-max。 进程可打开最大文件描述设置 查看进程可打开最大文件描述符: soft nofile # ulimit -n 65535 配置进程可打开最大文件描述符 a)永久配置 添加带背景色内容 # vim / 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit c. nofile的soft limit不能超过其hard limit d.

    2.2K42

    Linux之内存描述符mm_struct

    Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。 (所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor 其中有一个被称为'内存描述符‘(memory descriptor)的数据结构mm_struct,抽象并描述了Linux视角下管理进程地址空间的所有信息。 mm_struct定义在include/linux/mm_types.h中,其中的域抽象了进程的地址空间,如下图所示: ? page_table_lock; //线性区的自旋锁和页表的自旋锁 23 24 struct list_head mmlist; //指向内存描述符链表中的相邻元素

    1.1K50

    调整进程的最大linux文件描述符

    maxsyslogins/priority/locks/sigpending/msgqueue/nice/rtprio/ value: -1/unlimited/infinity/ 具体值 要修改最大文件描述符重点在于 item和value 2.修改 ---- 2.1 先查看当前用户最大文件描述符数量: 1 ulimit -Hn 2 ulimit -Sn 2.2 修改当前用户进程的最大文件描述符数量: 1 vim

    1.3K50

    Linux 进程、线程、文件描述符的底层原理

    Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。 内核对于一个进程的描述,也可以称为「进程描述符」。 我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。 我们可以重新画一幅图: ? 到这里,你可能也看出「Linux 中一切皆文件」设计思路的高明了,不管是设备、另一个进程、socket 套接字还是真正的文件,全部都可以读写,统一装进一个简单的files数组,进程通过简单的文件描述符访问相应资源 为什么说 Linux 中线程和进程基本没有区别呢,因为从 Linux 内核的角度来看,并没有把线程和进程区别对待。

    57630

    Linux 进程、线程、文件描述符的底层原理

    Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。 内核对于一个进程的描述,也可以称为「进程描述符」。 二、文件描述符是什么 先说files,它是一个文件指针数组。一般来说,一个进程会从files[0]读取输入,将输出写入files[1],将错误信息写入files[2]。 我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。 为什么说 Linux 中线程和进程基本没有区别呢,因为从 Linux 内核的角度来看,并没有把线程和进程区别对待。

    9910

    linux17-详说linux的重定向与文件描述符

    前言 上一节中 [[16-linux程序后台执行指西]],我们提到了,重定向操作,对于后台执行命令来说,很有用,这一节来详细说说。 部分内容参考:Linux 基础入门(新版) - 实验楼[1] 1-linux的输入与输出 Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout 2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。 上面我们使用了也是它默认提供的 0,1,2 号文件描述符。另外我们还可以使用 3-8 的文件描述符,只是它们默认没有打开而已。 在 Linux 中有一个被称为“黑洞”的设备文件,所有导入它的数据都将被“吞噬”—— /dev/null 。

    8630

    HoG描述符

    , hog_image=hog(im, orientations=8,pixels_per_cell=(16,16),cells_per_block=(1,1),visualize=True)#HoG描述符 hog_image_rescaled,cmap=pylab.cm.gray) axes2.set_title('Histogram of Oriented Gradients') pylab.show() 算法:HOG描述符是利用该算法最终得到的归一化区间描述符 首先计算水平和垂直梯度图像 然后计算梯度直方图 接着块(区间)集归一化处理 最后,扁平组合成特征描述符向量

    8110

    USB描述符

    通常,设备会通过一个描述符表格(其固件的一部分)来提供这些信息。描述符表格是数据的结构化序列,描述了设备信息;这些值由开发人员定义。所有描述符表格都具有一个标准信息,用于介绍设备属性和电源要求。 如果某个设计满足指定 USB 设备类别的要求,则该 USB 设备必须具备的其他描述符信息都将包含在设备描述符结构中。附录 A 包含一个 PSoC USB 的全功能设备描述符的示例。 如果您正在阅读或创建您自己的描述符,那么请注意,传输数据字段时,优先传输最低有效位。许多参数的长度均为 2个字节。请确保先发送低字节,然后再发送高字节。

    20720

    SIFT描述符

    算法:SIFT描述符是将图像内容转换为不受平移、旋转、缩放和其他成像参数影响的局部特征坐标。 对多个尺度和图像位置进行搜索,利用DoG检测器给出位置和特征尺度 关键点定位:根据稳定性指标选择关键点,剔除低对比度和边缘关键点,只保留强感兴趣点 方向分配:计算每个关键点区域的最佳方向,以提高匹配的稳定性 关键点描述符计算

    8320

    类型描述符

    例如Thread的类名叫java.lang.Thread,但是在class文件格式的描述符中使用的内部格式,对Thread类名称utf8的引用却是:java/lang/Thread 不信我们随便打开一个 class文件 可以看到类似的描述符 那如何获取类的描述符呢? 首先,基本类型描述符,都是以ASCII字符表示,例如L 正斜杠类名;表示对象类型,[表示数组类型 我们可以在sun.invoke.util.Wrapper下看到对应枚举常量 例如: int的描述符为 I Integer的描述符为Ljava/lang/Integer; void的描述符为V java.lang.Void的描述符为Ljava/lang/Void; Object的描述符为 Ljava/lang/Object; double d[][][]的描述符为[[[D 然后方法描述符的规则是: (参数描述符们)返回值描述符 例如: 这样一个方法: Object m(int

    7340

    python 属性描述符

    覆盖型与非覆盖型描述符对比 4.1 覆盖型描述符 4.2 没有 `__get__` 方法的覆盖型描述符 4.3 非覆盖型描述符 4.4 在类中覆盖描述符 5. 描述符示例:验证属性 描述符是对多个属性 运用 相同存取逻辑的一种方式 描述符是实现了 特定协议 的类,这个协议包括 __get__、__set__ 和 __delete__ 方法 property 类实现了完整的描述符协议 实现了 __get__、__set__ 或 __delete__ 方法的类是描述符。 ——管理 数据属性 这种描述符也叫覆盖型描述符,因为描述符的 __set__ 方法使用托管实例中的同名属性覆盖(即插手接管)了要设置的属性 4. ) # 9 4.3 非覆盖型描述符 没有实现 __set__ 方法的描述符是 非覆盖 型描述符

    7410

    linux下文件描述符和epoll工作模式的理解

    1.文件描述符 ---- linux下的文件描述符是一个用于表述指向文件的引用的抽象化概念(在windows下是HANDLE句柄). 文件描述符在形式上是一个非负整数值.但实际上,他是一个索引值,指向系统内核为每个进程维护的一张记录表. 在这张记录表上记录每个进程打开的文件对应的文件结构体信息.  那么也就是说,文件描述符不存在事件这一说法,文件描述符本身不会产生事件,但文件描述符对应的文件可能会因为modify而产生事件. 就可以被epoll正确的捕捉到. epoll可以在两种模式下来捕捉监听的文件描述符产生的事件. 总结:事件由系统产生,epoll提供了事件通知的两种方式,文件描述符作为事件附着的抽象标识.

    75071

    解读文件描述符

    最近由于机缘巧合,结合最近工作中遇到的一些问题,深入了解了文件描述符(File Descriptor,简称FD,以下使用 FD 称谓)。预计会有两到三篇关于 FD 的文章陆续出来。 概念定义 文件描述符 是 用来访问资源(文件,输入输出设备等)的一种抽象指示符。 文件描述符 是POSIX(Portable Operating System Interface)规范的组成部分 文件描述符 通常是非负整数,C 语言中使用int类型。

    44631

    Python描述符(上)

    描述符概念 我觉得要想了解描述符,理解这两个关键字即可。类,托管。 描述符本质上就是一个类,可以将其他类的属性托管给这个类(描述符)。 小试牛刀 类 描述符本质上是个类,那我们定义一个普通的类肯定不是描述符,只要有__get__,__set__,__delete__魔术方法之一的类就是描述符。 托管 我们来举一个简单的例子,来看看怎么把类属性托管给描述符。 ,其中有__get__魔术方法;在A类中,我们将描述符赋值给类的x属性,这样x属性就被描述符托管了,当我们访问x属性时,就会触发描述符的get方法。 描述符方法 __get__魔术方法 上面的内容让我们了解了数据描述符,那现在我们再仔细的学习下描述符的各种方法和使用,首先是__get__方法。 触发时间:在访问对象成员属性的时候触发。

    10350

    全局描述符

    Hi~朋友,码字不易,点点关注呗 摘要 什么是全局描述符表 什么是段描述符 GDTR寄存器 段选择子 什么是全局描述符表 进入保护模式以后,数据段、代码段等内存段不再是通过段寄存器获得段基址就可以使用, 什么是段描述符 全局描述符表记录各个段的信息,那么各个段的信息又存储在什么位置?其实各个段的信息便是使用段描述符来记录。 因此段描述符中除了记录了段的基址以外还有一些额外字段来保证安全。 段描述符的具体结构如下: ? ,段界限只是单位量,G用来标识单位量的大小,G为0,单位量为字节,G为1,单位量为4K S:高32位中12位,S用来表明是系统端(S为0)还是数据段(S为1),在CPU的世界里,系统段主要是指各种称为的结构 ,如调用,任务;数据段主要是指操作系统及应用程序的代码、数据以及栈。

    31750

    Python描述符(下)

    前言 上节课我们讲解了描述符的概念和使用,其实,除了上次定义类(__get__,__set__,__delete__)这种描述符方式外,还有其他两种设置描述符的方式,这节课我们就来一起学习吧。

    9510

    Linux内核19-中断描述符表IDT的初始化

    Linux使用中断描述符表IDT记录管理所有的中断和异常。那么,首先,Linux内核应该把IDT的起始地址写入idtr寄存器,然后初始化所有的表项。这一步在初始化系统时完成。 那么把相应的中断或陷阱描述符的DPL域设为3即可。比如系统调用。 让我们看看Linux如何实现这种策略。 中断、陷阱和系统 在之前的文章中,我们已经介绍过,Intel提供了三种类型的中断描述符:任务,中断和陷阱描述符Linux的分类有些不同,它们如下所示: 中断 和Intel的中断相同。 所有的用户进程不能访问(该的DPL设为0)。所有Linux的中断处理程序都是通过中断激活的,也就是说只能在内核态访问。 系统 属于Intel的陷阱,可以被用户态进程访问(该的DPL设为3)。 一旦Linux启动,IDT会被搬运到RAM的受保护区域并被第二次初始化,因为Linux不会使用任何BIOS程序。 IDT结构被存储在idt_table表中,包含256项。

    8310

    相关产品

    • 腾讯云统一门户

      腾讯云统一门户

      千帆海风统一门户(TMast Portal,TMPL)致力于为企业构建以用户为中心、体验融合一致、架构开放敏捷的集统一门户、统一待办、统一流程、应用可插拔为一体的企业级数字化平台。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券