《Linux程序设计 第四版》之第四章的练习题

1、P128

一个获取日期 时间 格式化获取时间 日期 的程序。

#include<stdio.h>
#include<time.h>



int main(int argc,char** argv)
{

struct tm* time1,*time_trans;    //时间数据结构
time_t alt;
char c_time[128];
char* result;
char* result1="";

time(&alt);
time1=localtime(&alt);   //返回本地时间存到数据结构中


printf("the date is %d.%d.%d \n",time1->tm_year,time1->tm_mon,time1->tm_mday);   
printf("the date is %s \n",ctime(&alt));    	//ctime将数据结构中转换成字符串返回

strftime(c_time,128,"%Y %B %d  %p %I:%M:%S",time1);    //格式化将时间存到c_time字符串
printf("%s\n", c_time);

strcpy(c_time,"12 Mar 2008,12:13:14");
printf("Now trans the time %s \n", c_time);

result=strptime(c_time,"%d %b %Y,%R:%S",time_trans);

printf("%s \n", result);
//printf("%d", strcmp(result1,"ye"));
if(strcmp(result,result1)==0)
{

	printf("%d %d %d\n", time_trans->tm_hour,time_trans->tm_min,time_trans->tm_sec);


}

return 0;
}

2、P130、132

一个创建临时文件、获取用户信息、输出Log的程序。

#include<stdio.h>
#include<pwd.h>
#include<sys/types.h>
#include<syslog.h>
int main(int argc,char** argv)
{

uid_t id;
struct passwd *pw;
FILE* tempFile;
char* fileName;

id=getuid();     //获取用户的uid

pw=getpwuid(id); //获取用户uid的pw文件信息

printf("UID PASSWORD ENTRY:\n name=%s,uid=%d,home=%s,shell=%s\n",pw->pw_name,pw->pw_uid, pw->pw_dir,pw->pw_shell);


pw=getpwnam("root"); //获取用户root的pw文件信息
printf("ROOT PASSWORD ENTRY:\n name=%s,uid=%d,home=%s,shell=%s\n",pw->pw_name,pw->pw_uid, pw->pw_dir, pw->pw_shell);

while(pw=getpwent()) //依次获取所有用户的pw文件信息
{

//printf("UID PASSWORD ENTRY:\n name=%s,uid=%d,home=%s,shell=%s\n",pw->pw_name,pw->pw_uid, pw->pw_dir, pw->pw_shell);

}


fileName=tmpnam((void*)0);         //返回一个唯一的文件名
tempFile=fopen(fileName,"r");      
if(!tempFile)
{
syslog(LOG_ERR|LOG_USER,"oops-%m\n");

}


tempFile=tmpfile();            //返回一个有唯一的文件名的文件file*
if(!tempFile)
{
syslog(LOG_ERR|LOG_USER,"%m\n");

}



return 0;
}


3、P141

一个资源限制 CPU消耗的程序。

#include<stdio.h>
#include<sys/time.h>
#include<sys/types.h>
#include<sys/resource.h>
#include<math.h>

void fun()
{
	char* tmpStr="what's wrong \n";
	FILE* f;
	//f=fopen("haha","w+");
	f=tmpfile();
	int i=0;
	if (!f)
	{
		printf("??\n");
	}
	for(;i<1000000;i++)
	{
		fwrite(tmpStr, sizeof(tmpStr),1,f);
		if(ferror(f))
		{
			fprintf(stderr,"WRONG");
			return ;
		}
	}
	i=0;

	for (; i < 10000000; ++i)
	{
		int k;
		k=(1.1+i*i);
	}
	//f.close();

}

int main(int argc,char** argv)
{
	struct rusage r_usage;
	struct rlimit r_limit;
	int pro;

	fun();

	getrusage(RUSAGE_SELF,&r_usage);   //获得程序运行的信息 存到结构体rusage中


	printf("CPU usage: User=%d.%06d,system==%d.%06d\n",r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec,r_usage.ru_stime.tv_sec,r_usage.ru_stime.tv_sec);

	pro=getpriority(PRIO_PROCESS,getpid());  //获得程序的优先级
	printf("Current Priority:%d\n",pro);

	r_limit.rlim_cur=2048;
	r_limit.rlim_max=4096;
	setrlimit(RLIMIT_FSIZE,&r_limit);    //设置程序的一些资源限制
	fun();
	return 0;
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。