当前位置:  技术问答>linux和unix

有时候,在solaris调用open()会失败,errno=24,这是什么原因?怎样察看某进程已打开多少文件?是什么文件?

    来源: 互联网  发布时间:2015-01-22

    本文导语:  有时候,在solaris调用open()会失败,errno=24,这是什么原因? 在某进程正在运行的时候,怎样察看该进程已打开多少文件?是些什么文件? | #define EMFILE  24  /* Too many open files        *...

有时候,在solaris调用open()会失败,errno=24,这是什么原因?
在某进程正在运行的时候,怎样察看该进程已打开多少文件?是些什么文件?

|
#define EMFILE  24  /* Too many open files        */

所以你想知道进程已经打开了多少文件??
对把?

不过是,还有一个问题,你open文件后是否close呢??
虽然现在很多操作系统都说如果open后不close的话
但进程退出时,系统自动将该文件close

但实际使用结果并不是这样
如果没有close的话,系统中可能占用了文件打开数

你可以看看是否是这个原因!


另外,你可以修改内核参数,增加文件的打开数目
(至于solaris上怎么修改我也不知道啊!呵呵)

|
会不会真的是打开的文件过多,可以用getrlimit来做跟踪,或者
你也可以用一下代码试试:

/*  see if we're going to run out of file descriptors  */
   getrlimit(RLIMIT_NOFILE, &rlp);
   if(num_fd > (rlp.rlim_max - 3)) {    /* stdin + stdout + stderr = 3  */
      fprintf(stderr, "number of dchannels causes process limit of %d "
            "open files to be exceededn", rlp.rlim_max);
      exit(-1);
   }
   /*  bump up the limit if needed  */
   if(num_fd > (rlp.rlim_cur - 3)) {
      rlp.rlim_cur = num_fd + 3;
      setrlimit(RLIMIT_NOFILE, &rlp);
   }

|
包含
#include 
#include 

printf("error is :%sn",(char *)strerror(errno));

在某进程正在运行的时候,怎样察看该进程已打开多少文件?是些什么文件?
???我有点不明白,运行的时候看打开文件,给点解释

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用lumaqq发送消息,有时候不能用键盘输入?!
  • bash的set为什么有时候显示很多内容?
  • 雷老虎,我实在想不通下面代码了:为什么产生产生的号码一样?(有时候前几组一样,后几组一样)
  • socket程序退出后有时候端口还没有释放?请问高人如何解决啊。正确立马结帖。
  • 有时候觉得ejb实现的东西用javabean也可以实现,好象还省资源


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3