当前位置: 技术问答>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上怎么修改我也不知道啊!呵呵)
所以你想知道进程已经打开了多少文件??
对把?
不过是,还有一个问题,你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);
}
你也可以用一下代码试试:
/* 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));
在某进程正在运行的时候,怎样察看该进程已打开多少文件?是些什么文件?
???我有点不明白,运行的时候看打开文件,给点解释
#include
#include
printf("error is :%sn",(char *)strerror(errno));
在某进程正在运行的时候,怎样察看该进程已打开多少文件?是些什么文件?
???我有点不明白,运行的时候看打开文件,给点解释