首页
学习
活动
专区
圈层
工具
发布

【Linux】基础IO(1)文件、fd

如果我们要用系统提供的接口close函数关闭打开的文件,它要求传递的参数就是文件描述符。使用系统提供的文件接口免不了要使用这个文件描述符。...1.2 认识文件描述符fd 之前通过open接口讲到,文件描述符就是一个整数。但这个整数为什么为从3开始?...而且也能够看到,stdin、stdout和stderr它们的类型都是文件指针,文件指针类型其实也就是对fd的一种封装,即FILE是一种结构体,它里面有存储fd也就是每个文件对应的文件描述符。...既然是数组,那么就一定有对应的下标,而这些下标也就是fd,即文件描述符的本质是数组下标。...拿c语言举例,系统提供的fd,c语言封装为FILE;open封装为fopen,close封装为fclose,write封装为fwrite。为什么c语言要这样做?----为了有更好的跨平台性。

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

    【Linux】文件系统:文件fd

    返回值 成功:返回一个文件描述符(非负整数),用于后续的 read、write、close 操作。 失败:返回 -1,并设置 errno 变量来指示错误类型。...write(fd,message,strlen(message)); close(fd); return 0; } 此时如果我们重新写入aaaaa: 这里的文件内容老的没有被清空...而, open close read write lseek 都属于系统提供的接口,称之为系统调用接口 所以,可以认为,f#系列的函数,都是对系统调用的封装,方便二次开发 接下来看fd fd是open的返回值...所以文件描述符fd的本质是内核的进程的,文件映射关系数组的下标 所以文件一旦打开,我们发现,write,read,close都需要参数fd,一旦fd传入,操作系统就能知道你要访问当前系统的哪个文件 所以读文件就是把缓存中的内容拷贝到应用层...我们需要理解,linux,一切皆为文件 在linux层面上他是怎么做到的呢?

    67500

    Linux下 fd_set 结构

    fd_set是一种数据类型,在select函数中包含了3个参数,就是这个fd_set类型,fd_set也是理解select模型的关键,关于select的具体说明,可以参考之前的文章嵌入式Linux编程之...select可以同时对多个文件描述符的状态去监听,那么这个所谓的“多个”的实现就是通过fd_set来实现的, 简单的说: fd_set是select监听描述符的集合,每个描述符集存储在一个fd_set...,也就是只有8bit,那么1个字节长的fd_set最大可以对应8个文件描述符(fd), 那么问题来了,如果文件描述符是100怎么办?...答案很简单,fd_set并不是指有1个字节,可以有n个字节,可以拿多个字节凑多个bit,如果fd是100,仍然可以执行 FD(100, &set),执行后,set的值为 1xxxxxxxxxxx.......至于fd_set的最大为多少,取决于机器,一般 是够用的,因为linux在分配文件描述符的时候,不是随意分配 个几千几万的,这个是比较宝贵的资源,是从小到大,一点点递增的,谁也不会傻到同时打开几万个文件的

    3.1K20

    从linux源码看socket的close

    从linux源码看socket的close 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...tcp的关闭主要分主动关闭、被动关闭以及同时关闭(特殊情况,不做描述) 主动关闭 close(fd)的过程 以C语言为例,在我们关闭socket的时候,会使用close(fd)函数: int socket_fd...FD_CLR(fd, fdt->close_on_exec); // 释放文件描述符 // 将fdt->open_fds即打开的fd位图中对应的位清除 // 再将fd挂入下一个可使用的fd以便复用...出现大量close_wait的情况 linux中出现大量close_wait的情况一般是应用在检测到对端fin时没有及时close当前连接。有一种可能如下图所示: ?

    6.1K80

    在 Linux 上用 fd 代替 find命令

    许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。...因此,我更喜欢使用 Rust 编写的 fd 命令,因为它提供了合理的默认值,适用于大多数使用情况。 正如它的 README 所说,“fd 是一个在文件系统中寻找条目的程序。...安装 fd 在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。...另外,你也可以使用 Rust 的 Cargo 软件包管理器: $ cargo install fd-find 使用 fd 要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如: $ fd shregistry...例如: $ fd .

    2.3K50

    Linux显示文件描述符命令:fd

    介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。图片2. 语法使用fd命令的语法如下:fd [选项]3....4.3 显示文件描述符的类型使用fd -t命令可以显示当前进程的文件描述符的类型。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。...在日常的系统管理和开发工作中,熟悉和掌握fd命令的使用将大大提高工作效率。希望本文对你理解和使用Linux fd命令有所帮助。如需进一步了解命令的更多细节和用法,请查阅相关的文档和参考资料。

    3.8K20

    关于linux进程间的close-on-exec机制

    我们需要用到这个标记:FD_CLOEXEC 3.3 执行时关闭(close-on-exec)标记:FD_CLOEXEC 在执行exec()之前,程序有时需要确保关闭某些特定的文件描述符。...3.4 closeonexec测试程序 FD_CLOEXEC,这是fcntl的一个Flag标志,用来设置文件的close-on-exec状态标志。...在exec()调用后,close-on-exec标志为0的情况,此文件不被关闭;非零则在exec()后自动关闭。默认close-on-exec状态为0,需要通过FD_CLOEXEC设置。...包括Linux在内的许多UNIX实现,还允许另外一种非标准的ioctl调用来修改该标记: 以ioctl(fd, FIOCLEX)为fd设置此标志 以ioctl(fd, FIONCLEX)来清除此标志...Linux系统的open函数,其中flags参数可以传入O_CLOEXEC标记,即可自动设置上FD_CLOEXEC标记,但Linux内核版本2.6.23才开始支持此标记。

    3.1K30

    【Linux】基础IO——系统文件IO&fd&重定向&理解

    man 2 close //头文件 #include //参数 int close(int fd); 同时,O_CREAT:文件不存在,则需要我们去创建它,并不会自动创建好哈。...("fd: %d\n",fd2); printf("fd: %d\n",fd3); printf("fd: %d\n",fd4); close(fd0); close...(fd1); close(fd2); close(fd3); close(fd4); } 为什么从3开始???...stdin—>0,dup2(fd,0);//输入重定向 ---- 六、Linux一切皆文件 Linux一切皆文件: 在冯诺依曼体系中,我们知道硬件有键盘、显示器、磁盘、网卡等外设,在IO过程中,外设任何的数据处理都需要把数据读到内存...站在struct file上层看来,所有的设备和文件,统一都是struct file->,就可以调用具体的设备方法了,所以在用户级看到的就是Linux下一切皆文件!

    88520
    领券