Let's go!!!!!
分类: LINUX
2012-12-11 19:53:54
每一个系统对资源分配和使用不是随意的,都有限制。如对登录名的最大长度,系统存储页长度,每个实际用户ID的最大进程数等的限制。
可也用以下三个函数来查看这些限制。
long sysconf(int name) 对系统资源限制进行查看
long pathcongf(char *pathname,int name) 对一个文件资源限制进行查看,pathname为一个文件路径
long fpathconf(int fd,int name) 对一个打开的文件的资源限制进行查看,fd为一个文件描述符
具体限制参数(name)请看 APUE P33
#include
#include
int main()
{
long max;
max=sysconf(_SC_CHILD_MAX);
printf("HILD_MAX=%ld\n",max);
max=sysconf(_SC_LINE_MAX);
printf("LINE_MAX=%ld\n",max);
return 0;
}
结果:
HILD_MAX=1024
LINE_MAX=2048
#include
#include
int main()
{
long max;
max=pathconf("/etc/passwd",_PC_LINK_MAX);
printf("LINK_MAX=%ld\n",max);
max=pathconf("/etc/passwd",_PC_MAX_CANON);
printf("MAX_CANON=%ld\n",max);
return 0;
}
同样,对于每一个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit查询和更改。
int getrlimit(int resource,struct rlimit *ptr)
int setrlimit(int resource,struct rlimit *prt)
struct rlimit{
rlim_t rlim_cur; //soft limit
rlim_t rlim_max; //hard limit
};
资源限制:RLIMIT_NOFILE,这是对每个进程能打开的最大文件数进行限制。
具体还哪些资源限制有那些请看APUE P165
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
perror("getrlimit error");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
r.rlim_cur=100;
r.rlim_max=200;
if (setrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"setrlimit error\n");
exit(1);
}
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
return 0;
}