草庐IT

描述符

全部标签

linux - linux套接字的文件描述符总是按递增顺序排列吗

我在C/linux中有一个套接字服务器。每次我创建一个新套接字时,它都会被分配一个文件描述符。我想将这些FD用作每个客户的唯一ID。如果保证它们总是以递增的顺序分配(我正在运行的Ubuntu就是这种情况),那么我可以将它们用作数组索引。所以问题是:从linux套接字分配的文件描述符是否保证始终按递增顺序排列? 最佳答案 让我们看看它在内部是如何工作的(我使用的是内核4.1.20)。在Linux中分配文件描述符的方式是使用__alloc_fd。当您执行open系统调用时,将调用do_sys_open。此例程从get_unused_fd

c - stdio 文件描述符(stdin、stdout、stderr)是否仅通过#include'ing <stdio.h> 打开?

在C语言中将整数转换为字符串时,我对包含stdio.h感到有点恼火——这不会使二进制文件因不必要的文件描述符和其他代码而膨胀吗?或者仅当您在代码中使用标准io文件描述符stdout、stdin或stderr时才打开流,例如printf、scanf、fprintf?如果我的代码只使用snprintf(3)可能还可以?我拥有的最接近的现成解决方案是将整数转换为strfromd(3)的doublefloat,格式字符串不超过小数点。bhuwansahni在HowtoconvertintegertostringinC?中提供了一个很好的自己动手解决方案我不知道如何使用(链接无效)itoa、_i

c - stdio 文件描述符(stdin、stdout、stderr)是否仅通过#include'ing <stdio.h> 打开?

在C语言中将整数转换为字符串时,我对包含stdio.h感到有点恼火——这不会使二进制文件因不必要的文件描述符和其他代码而膨胀吗?或者仅当您在代码中使用标准io文件描述符stdout、stdin或stderr时才打开流,例如printf、scanf、fprintf?如果我的代码只使用snprintf(3)可能还可以?我拥有的最接近的现成解决方案是将整数转换为strfromd(3)的doublefloat,格式字符串不超过小数点。bhuwansahni在HowtoconvertintegertostringinC?中提供了一个很好的自己动手解决方案我不知道如何使用(链接无效)itoa、_i

c - 如何在 C 中列出进程的所有文件描述符,而无需调用 lsof 或解析/proc/$PID

在JailedLinux环境中,我想用C获取当前用户态进程的文件描述符列表。是否有获取fdt的系统调用? 最佳答案 我不知道有什么方法可以获取文件描述符的数量,但你可以作弊。打开一个新的文件描述符并关闭它,记住你得到的fd号。从0到您可以打开的最大fd(您可以使用getdtablesize()获取此数字)将每个文件描述符dup2到保存的fd中。那些不返回错误的是开放的,其余的是关闭的。作为一个简化的例子,只计算它们:intcount_fds(void){intmaxfd=getdtablesize();intopenfds;intf

c - 如何在 C 中列出进程的所有文件描述符,而无需调用 lsof 或解析/proc/$PID

在JailedLinux环境中,我想用C获取当前用户态进程的文件描述符列表。是否有获取fdt的系统调用? 最佳答案 我不知道有什么方法可以获取文件描述符的数量,但你可以作弊。打开一个新的文件描述符并关闭它,记住你得到的fd号。从0到您可以打开的最大fd(您可以使用getdtablesize()获取此数字)将每个文件描述符dup2到保存的fd中。那些不返回错误的是开放的,其余的是关闭的。作为一个简化的例子,只计算它们:intcount_fds(void){intmaxfd=getdtablesize();intopenfds;intf

linux - linux 中串行端口描述符 block 上的“关闭”功能

最近我发现了一个对我来说很新的问题,非常感谢您的建议。我正在使用termios函数在Linux上进行串行通信。我其实用的不是真正的串口,而是虚拟的gadget串口驱动/dev/ttyGS0。文件描述符以非阻塞方式打开。我的程序定期生成数据并将其发送到/dev/ttyGS0。没有信息,如果另一端读取它。如果没有,一些内部fifo会填满并写入返回“会阻塞”错误。到目前为止一切顺利,我对此没有任何问题。问题是,当我想关闭这种带有填充的fifo的文件描述符时,关闭函数block!不是无限期地,而是大约10秒钟。我尝试在关闭前执行tcflush(uart->fd,TCOFLUSH)但没有任何效果

linux - linux 中串行端口描述符 block 上的“关闭”功能

最近我发现了一个对我来说很新的问题,非常感谢您的建议。我正在使用termios函数在Linux上进行串行通信。我其实用的不是真正的串口,而是虚拟的gadget串口驱动/dev/ttyGS0。文件描述符以非阻塞方式打开。我的程序定期生成数据并将其发送到/dev/ttyGS0。没有信息,如果另一端读取它。如果没有,一些内部fifo会填满并写入返回“会阻塞”错误。到目前为止一切顺利,我对此没有任何问题。问题是,当我想关闭这种带有填充的fifo的文件描述符时,关闭函数block!不是无限期地,而是大约10秒钟。我尝试在关闭前执行tcflush(uart->fd,TCOFLUSH)但没有任何效果

linux - 使用文件描述符调用 dlopen?

我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我在共享对象上签名。如果验证成功,我想加载当前打开的共享对象作为一个合适的共享对象。第一个问题:是否可以在签名检查期间调用dlopen并将共享对象作为数据文件加载,从而不执行代码?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA的标志。因为我将共享对象作为数据文件打开,所以我有可用的描述符。验证成功后,我想将描述符传递给dlopen,以便动态加载程序正确加载共享对象。我不想关闭文件然后通过dlopen重新打开它,因为它可能会引入竞争条件(验证的文件与打开和执行的文件不同)。第二个问题:如何使用文件描述符

linux - 使用文件描述符调用 dlopen?

我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我在共享对象上签名。如果验证成功,我想加载当前打开的共享对象作为一个合适的共享对象。第一个问题:是否可以在签名检查期间调用dlopen并将共享对象作为数据文件加载,从而不执行代码?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA的标志。因为我将共享对象作为数据文件打开,所以我有可用的描述符。验证成功后,我想将描述符传递给dlopen,以便动态加载程序正确加载共享对象。我不想关闭文件然后通过dlopen重新打开它,因为它可能会引入竞争条件(验证的文件与打开和执行的文件不同)。第二个问题:如何使用文件描述符

c - 从 Linux 内核模块的文件描述符获取文件名/路径?

在linux内核模块中有没有办法从unsignedintfd获取文件名/路径?我知道这个答案:HowcanIgetafilenamefromafiledescriptorinsideakernelmodule?但如果我正确理解代码,我还需要一个structfiles_struct。编辑:请停止投票,因为它不是重复的。我正在寻求一种方法来从内核模块获取纯C中的文件名/路径,而不是使用系统工具。换句话说:在/procself/fd/上运行readlink不是一个好的答案。编辑2:内核的系统调用readssize_tread(intfd,void*buf,size_tcount);有3个参数