草庐IT

linux - 如何监视文件描述符的新数据可用性?

考虑以下代码片段。#include#include#include#includeintmain(intargc,char**argv){intfd;charbuf[1024];inti;structpollfdpfds;fd=open(argv[1],O_RDONLY);while(1){pfds.fd=fd;pfds.events=POLLIN;poll(&pfds,1,-1);if(pfds.revents&POLLIN){i=read(fd,buf,1024);write(1,buf,i);}}return0;}这个程序接收一个文件名,打开相应的文件,并“轮询”它的文件描述符以

Linux 文件描述符 - 获取当前重定向标准输出文件?

我正在尝试获取当前的标准输出重定向,但遇到了一些麻烦。我有一个始终使用stdout重定向运行的脚本,即:myscript.sh>/tmp/output.log在myscript.sh中,我需要找出它输出到哪个文件。我目前正在尝试这个(不工作):logfile=$(readlink-f/proc/self/fd/1)例如,输出logfile=/tmp/sflq.r3f。相反,我需要发现它会转到/tmp/output.log这可能吗?如果重要的话,我会使用kornshell...谢谢! 最佳答案 $()使用管道(或ksh出现的样子——k

c - 通过文件描述符 (fd) 而不是文件名来区分/比较两个文件

在Linux中有什么办法,使用c,使用通用格式生成存储在内存中的两个文件的差异/补丁(即:统一差异,就像命令行diff实用程序一样)?我在一个系统上工作,在该系统中我在内存中生成了两个文本文件,并且没有可用或不需要的外部存储。我需要创建这两个文件的逐行差异,因为它们是mmap的,所以它们没有文件名,阻止我简单地调用system("difffile1.txtfile2.txt").我有可供使用的文件描述符(fd),这是我访问数据的唯一入口点。有没有办法通过比较两个打开的文件来生成差异/补丁?如果实现是MIT/BSD许可的(即:非GPL),那就更好了。谢谢。 最

c - 文件描述符和fildes有什么区别

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。什么是fildes,在linux中,文件描述符和fildes有什么区别。例如,下面的写处理文件描述符ssize_twrite(intfd,constvoid*buf,size_tcount);下面的pwrite处理fildesssize_tpwrite(intfildes,constvoid*buf,size_tnbyte,off_toffset);

c - 如何确定文件描述符是否附加到 Linux 中的文件或套接字

在Linux中使用C语言,如何确定文件描述符是附加到文件还是套接字? 最佳答案 使用getsockopt获取文件描述符上的SO_TYPE。如果它不是套接字,它将返回-1并返回错误ENOTSOCK:intfd=/*...*/;boolis_socket;intsocket_type;socklen_tlength=sizeof(socket_type);if(getsockopt(fd,SOL_SOCKET,SO_TYPE,&socket_type,&length)!=-1){is_socket=true;}else{if(errno

linux - 在现代 Linux(即 ver>=3.0.0)上,是否有更简单的方法在不相关的进程之间共享文件描述符?

Linux是否提供了一种比使用sendmsg()系统调用发送fd(类型设置为SCM_RIGHTS的消息)更好的方法来将fd从一个进程发送到另一个进程以进行共享)通过UNIX域套接字?我想最好的可能性是能够以某种方式命名一个fd,然后在一个不相关的进程中打开它(按名称),但我对其他替代方案持开放态度。我问这个问题的原因是能够使用*fd()函数(例如,eventfd()、timerfd()、signalfd(),etc...)在没有父子关系的进程之间,这使得共享文件描述符变得更加困难。 最佳答案 在https://www.normale

c - Linux 内核如何知道将输入事件写入哪个文件描述符?

我想知道Linux内核知道将输入写入哪个文件描述符(例如/dev/input/eventX)的机制。例如,我知道当用户单击鼠标时,会发生中断,由驱动程序处理并通过input_event(drivers/input/input.c)传播到Linux输入核心,最终写入适当的文件在/开发/输入/。具体来说,我想知道我需要查看哪些源文件,以了解内核如何根据输入事件的相关信息知道要写入哪个文件。我的目标是看看我是否可以在内核将它们写入/dev/input/eventX字rune件之前确定与特定输入事件代码对应的文件描述符。 最佳答案 您可能会

java - Java 中使用 javax.xml 的错误文件描述符 IOException

我正在使用标准的javax.xml包在Linux机器上解析一些XML文件。我的代码如下:try{//PrepareparserDocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();Documentdocument=documentBuilder.parse(file.getAbsolutePath());//Thisisline397XPathxPath=xPathFactory.newXPath();...}catch(IOExceptione){...}单个DocumentBuilder

c - Linux 服务器套接字 - 错误的文件描述符

我在Linux下遇到服务器套接字问题。由于某种我不知道的原因,服务器套接字消失了,并且我在等待传入连接的选择调用中收到Badfiledescriptor错误。当我在不同线程中关闭不相关的套接字连接时,总是会出现此问题。这发生在具有2.6.36内核的嵌入式Linux上。有人知道为什么会这样吗?服务器套接字可以简单地消失导致错误的文件描述符是否正常?编辑:其他套接字代码实现VNC服务器并在完全不同的线程中运行。其他代码中唯一特别的是setjmp/longjmp的使用,但这应该不是问题。创建服务器套接字的代码如下:intserver_socket=socket(PF_INET,SOCK_ST

linux - epoll 中监视的文件描述符的数量

我正在寻找一种方法来检查当前由epoll实例监视的文件描述符的数量。我使用以下内容创建和填充epoll实例epoll_createepoll_ctl平台是Gnu/Linux。 最佳答案 据我所知,没有可用的系统调用可以提供由epoll监视的文件描述符的计数。您可以通过维护一个计数器变量来实现这一点。使用epoll_ctl()将文件描述符成功添加/删除到epoll后,增加/减少此变量。 关于linux-epoll中监视的文件描述符的数量,我们在StackOverflow上找到一个类似的问题