我正在开发一个长时间运行的python脚本,它与不同的串行端口建立许多连接。该脚本在执行几小时后崩溃,理由是“打开的文件太多”。我已将问题追踪到serial模块,其中.close()方法似乎没有减少python使用的文件描述符的数量。我正在使用lsof|检查这个python|厕所。使用Debian7.2和Python2.7.3下面的例子慢慢地使用了越来越多的文件描述符,直到达到极限。为什么会这样,我该如何避免?#!/usr/bin/envpythonimportserial#Usedtocommunicatewithpressurecontrollerimportloggingimpo
我正在开发一个长时间运行的python脚本,它与不同的串行端口建立许多连接。该脚本在执行几小时后崩溃,理由是“打开的文件太多”。我已将问题追踪到serial模块,其中.close()方法似乎没有减少python使用的文件描述符的数量。我正在使用lsof|检查这个python|厕所。使用Debian7.2和Python2.7.3下面的例子慢慢地使用了越来越多的文件描述符,直到达到极限。为什么会这样,我该如何避免?#!/usr/bin/envpythonimportserial#Usedtocommunicatewithpressurecontrollerimportloggingimpo
当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)
当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)
在我的客户端代码中,我按照以下步骤连接到套接字:创建套接字sockDesc=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)连接它(如果失败重试'x'次)connect(sockDesc,(sockaddr*)&destAddr,sizeof(destAddr))(填写destAddr字段后)使用套接字进行send()/recv()操作:send(sockDesc,buffer,bufferLen,0)recv(sockDesc,buffer,bufferLen,0)close()套接字描述符并退出close(sockDesc)如果在send()/recv
在我的客户端代码中,我按照以下步骤连接到套接字:创建套接字sockDesc=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)连接它(如果失败重试'x'次)connect(sockDesc,(sockaddr*)&destAddr,sizeof(destAddr))(填写destAddr字段后)使用套接字进行send()/recv()操作:send(sockDesc,buffer,bufferLen,0)recv(sockDesc,buffer,bufferLen,0)close()套接字描述符并退出close(sockDesc)如果在send()/recv
intmain(){intdata_processed;intfile_pipes[2];constcharsome_data[]="123";charbuffer[BUFSIZ+1];pid_tfork_result;memset(buffer,'\0',sizeof(buffer));if(pipe(file_pipes)==0){fork_result=fork();if(fork_result==-1){fprintf(stderr,"Forkfailure");exit(EXIT_FAILURE);}//We'vemadesuretheforkworked,soiffork_
intmain(){intdata_processed;intfile_pipes[2];constcharsome_data[]="123";charbuffer[BUFSIZ+1];pid_tfork_result;memset(buffer,'\0',sizeof(buffer));if(pipe(file_pipes)==0){fork_result=fork();if(fork_result==-1){fprintf(stderr,"Forkfailure");exit(EXIT_FAILURE);}//We'vemadesuretheforkworked,soiffork_
我很想知道文件描述符的有效值。请让我解释一下。我知道,例如,当我使用#include时在我的linux系统上,然后调用打开文件进行读取:intfileDescriptor;fileDescriptor=open("/some/filename",O_RDONLY);可能会发生错误,结果我收到-1。顺便说一下,(-1)negativeone一定有某种特殊的含义。是否所有其他值都是有效的文件描述符?即还有负值,如-2和-1023?假设int是4个字节(sizeof(int)==4),那么(-1)=1000000000000000000000000000001将是唯一可检测到的无效文件描述符
我很想知道文件描述符的有效值。请让我解释一下。我知道,例如,当我使用#include时在我的linux系统上,然后调用打开文件进行读取:intfileDescriptor;fileDescriptor=open("/some/filename",O_RDONLY);可能会发生错误,结果我收到-1。顺便说一下,(-1)negativeone一定有某种特殊的含义。是否所有其他值都是有效的文件描述符?即还有负值,如-2和-1023?假设int是4个字节(sizeof(int)==4),那么(-1)=1000000000000000000000000000001将是唯一可检测到的无效文件描述符