程序中用到 math.c,使用 gcc 编译,需要加上 -lm 选项。
-l表示使用库,m为数学库。
=================
Linux程序设计中的一个例子:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> #include < sys / types.h >
#include < sys / resource.h >
#include < sys / time.h >
#include < unistd.h >
#include < stdio.h >
#include < math.h >
/// 向一个临时文件写一个字符串10000次,然后进行一些数学运算,目的是制造一些CPU负荷
void work()
{
FILE * f;
int i;
double x = 4.5 ;
f = tmpfile(); // 创建临时文件
for (i = 0 ; i < 10000 ; i ++ ){
fprintf(f, " Do some output\n " );
if (ferror(f)){ // TODO ferror?
fprintf(stderr, " Error writing to temporary file\n " );
exit( 1 );
}
}
for (i = 0 ; i < 1000000 ; i ++ )
x = log(x * x + 3.21 );
}
/// main 函数先调用 work, 再调用 getrusage 函数查看它使用了多少 CPU 时间。把这些资料显示在屏幕上。
int main()
{
struct rusage r_usage;
struct rlimit r_limit;
int priority;
work();
getrusage(RUSAGE_SELF, & r_usage); // 只返回当前程序的 CPU 占用时间
printf( " CPU usage: User = %ld.%06ld, System = %ld.%06ld\n " ,
r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec, // r_usage.ru_utime 程序本身执行它的指令所消耗的时间
r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec); // r_usage.ru_stime OS由于这个程序而消耗的 CPU 时间
/// 调用 getpriority 和 getrlimit 函数分别查出自己的当前优先级和文件长度限制
priority = getpriority(PRIO_PROCESS, getpid()); // PRIO_PROCESS 表示后面是进程标识符
printf( " Current priority = %d\n " , priority);
getrlimit(RLIMIT_FSIZE, & r_limit); // 读取以字节计的文件长度限制到 r_limit 中
printf( " Current FSIZE limit: soft = %ld, hard = %ld\n " ,
r_limit.rlim_cur, r_limit.rlim_max); // rlim_cur 软限制, rlimt_max 硬限制
/// 通过 setrlimit 函数设置了一个文件长度限制。
r_limit.rlim_cur = 2048 ; // 软限制2M
r_limit.rlim_max = 4096 ; // 硬限制4M
printf( " Setting a 2K file size limit\n " );
setrlimit(RLIMIT_FSIZE, & r_limit);
/// 然后再次调用 work 失败,因为它尝试创建的文件尺寸过大。
work();
exit( 0 );
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> #include < sys / types.h >
#include < sys / resource.h >
#include < sys / time.h >
#include < unistd.h >
#include < stdio.h >
#include < math.h >
/// 向一个临时文件写一个字符串10000次,然后进行一些数学运算,目的是制造一些CPU负荷
void work()
{
FILE * f;
int i;
double x = 4.5 ;
f = tmpfile(); // 创建临时文件
for (i = 0 ; i < 10000 ; i ++ ){
fprintf(f, " Do some output\n " );
if (ferror(f)){ // TODO ferror?
fprintf(stderr, " Error writing to temporary file\n " );
exit( 1 );
}
}
for (i = 0 ; i < 1000000 ; i ++ )
x = log(x * x + 3.21 );
}
/// main 函数先调用 work, 再调用 getrusage 函数查看它使用了多少 CPU 时间。把这些资料显示在屏幕上。
int main()
{
struct rusage r_usage;
struct rlimit r_limit;
int priority;
work();
getrusage(RUSAGE_SELF, & r_usage); // 只返回当前程序的 CPU 占用时间
printf( " CPU usage: User = %ld.%06ld, System = %ld.%06ld\n " ,
r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec, // r_usage.ru_utime 程序本身执行它的指令所消耗的时间
r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec); // r_usage.ru_stime OS由于这个程序而消耗的 CPU 时间
/// 调用 getpriority 和 getrlimit 函数分别查出自己的当前优先级和文件长度限制
priority = getpriority(PRIO_PROCESS, getpid()); // PRIO_PROCESS 表示后面是进程标识符
printf( " Current priority = %d\n " , priority);
getrlimit(RLIMIT_FSIZE, & r_limit); // 读取以字节计的文件长度限制到 r_limit 中
printf( " Current FSIZE limit: soft = %ld, hard = %ld\n " ,
r_limit.rlim_cur, r_limit.rlim_max); // rlim_cur 软限制, rlimt_max 硬限制
/// 通过 setrlimit 函数设置了一个文件长度限制。
r_limit.rlim_cur = 2048 ; // 软限制2M
r_limit.rlim_max = 4096 ; // 硬限制4M
printf( " Setting a 2K file size limit\n " );
setrlimit(RLIMIT_FSIZE, & r_limit);
/// 然后再次调用 work 失败,因为它尝试创建的文件尺寸过大。
work();
exit( 0 );
}
编译:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> [green@colorfulgreen environ]$ gcc limits.c - o limits
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> [green@colorfulgreen environ]$ gcc limits.c - o limits
报错:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> / tmp / ccxW94yi.o: In function `work ' :
limits.c:(.text + 0xaf ): undefined reference to `log '
collect2: ld returned 1 exit status
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> / tmp / ccxW94yi.o: In function `work ' :
limits.c:(.text + 0xaf ): undefined reference to `log '
collect2: ld returned 1 exit status
编译时加上 -lm 选项:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> [green@colorfulgreen environ]$ gcc limits.c - lm - o limits
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> [green@colorfulgreen environ]$ gcc limits.c - lm - o limits
Done.
============
PS:为嘛这个编辑器插入代码时最前面不能有下面这几行T_T
/**
* 资源限制
**/