2023年7月22日,周六上午
目录
sysconf
是一个缩写形式,其英文全称是 "System Configuration",意为 "系统配置"。
这个函数名反映了它的用途,即用于查询和获取系统的运行时配置信息。
通过调用 sysconf
函数,可以获取诸如最大文件数、页面大小、最大参数长度等与系统配置相关的信息。这些信息对于程序的正确运行和优化往往非常重要。
#include
long sysconf(int name);
参数name用于指明要查询系统选项中的哪一项
sysconf
函数返回一个 long
类型的值,表示相应系统配置选项的值。如果查询失败或选项不可用,则返回-1。
在参数name里,可以填写如下宏:
_SC_ARG_MAX
:最大参数长度_SC_CHILD_MAX
:最大子进程数_SC_CLK_TCK
:每秒的时钟滴答数_SC_NGROUPS_MAX
:每个进程可拥有的最大组数_SC_OPEN_MAX
:每个进程可打开的最大文件数_SC_PAGESIZE
:页面大小_SC_RTSIG_MAX
:实时信号最大数_SC_STREAM_MAX
:每个进程可打开的最大流数_SC_TZNAME_MAX
:时区名的最大长度_SC_JOB_CONTROL
:是否支持作业控制_SC_SAVED_IDS
:是否支持保存的用户ID和组ID_SC_VERSION
:POSIX.1 版本号#include
#include
int main(){
//查询最大子进程数
printf("child max:%ld\n",sysconf(_SC_CHILD_MAX));
//查询每秒的时钟滴答数
printf("clock tick per sec:%ld\n",sysconf(_SC_CLK_TCK));
}
这是一个Linux系统特有的函数
#include
clock_t times(struct tms *buf);
#include
#include
#include
int main(){
int i;
struct tms time1,time2;
long tick=sysconf(_SC_CLK_TCK);
times(&time1);
printf("User time=%.2fs,System time=%.2fs\n",
(double)time1.tms_utime/tick,(double)time1.tms_stime/tick);
//如果不强制转换成double类型,那么除出来的数会为零
for(i=0;i<1000000000;i++);
times(&time2);
printf("User time=%.2fs,System time=%.2fs\n",
(double)time2.tms_utime/tick,(double)time2.tms_stime/tick);
//如果不强制转换成double类型,那么除出来的数会为零
}
clock是C语言的函数,而不是Linux特有的系统函数,而times是Linux特有的系统函数
这意味着,虽然返回值都是clock_t,但二者是由区别的:
Linux的系统函数times返回的clock_t,每秒的产生数量等于sysconf(_SC_CLK_TCK)的返回值,在Cent0S 7里是100
C语言函数clock返回的clock_t,每秒的产生数量等于宏CLOCKS_PER_SEC,其实就是10000
#include
clock_t clock(void);
#include
#include
int main(){
int i;
clock_t time1,time2;
time1=clock();
printf("time1=%.2fs\n",(double)time1/CLOCKS_PER_SEC);
//如果不强制转换成double类型,那么除出来的数会为零
for(i=0;i<1000000000;i++);
time2=clock();
printf("time2=%.2fs\n",(double)time2/CLOCKS_PER_SEC);
//如果不强制转换成double类型,那么除出来的数会为零
}