《 유 닉 스 환경 고급 프로 그래 밍 》: 모든 명령 행 인자 와 시간 을 실행 합 니 다.
프로그램 소개: 이 예 는 모든 명령 행 인 자 를 셸 명령 으로 실행 하고 모든 명령 에 시간 을 재 며 시간 이 끝 날 때마다 tms 구조 체 에서 얻 은 값 을 출력 합 니 다.
//《APUE》 8-18:
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <unistd.h>
void pr_exit(int status);
void error_quit(const char *str);
static void pr_times(clock_t, struct tms*, struct tms*);
static void do_cmd(char *);
int main(int argc, char **argv)
{
int i;
setbuf(stdout, NULL);
for(i=1; i<argc; i++)
do_cmd(argv[i]);
return 0;
}
//
void error_quit(const char *str)
{
fprintf(stderr, "%s
", str);
exit(1);
}
void pr_exit(int status)
{
if( WIFEXITED(status) )
{
printf("normal termination, exit status = %d
",
WEXITSTATUS(status));
}
else if( WIFSIGNALED(status) )
{
printf("abnormal termination, signal number = %d%s
",
WTERMSIG(status),
#ifdef WCOREDUMP
WCOREDUMP(status) ? " (core file gererated)" : " no ");
#else
"");
#endif
}
else if( WIFSTOPPED(status) )
{
printf("child stopped, signal number = %d
",
WSTOPSIG(status));
}
}
//
static void do_cmd(char *cmd)
{
struct tms tmsstart, tmsend;
clock_t start, end;
int status;
printf("
command: %s
", cmd);
//
start = times(&tmsstart);
if( -1 == start )
error_quit("times error");
//
status = system(cmd);
if( status < 0 )
error_quit("system() error");
//
end = times(&tmsend);
if( -1 == end )
error_quit("times error");
pr_times(end-start, &tmsstart, &tmsend);
pr_exit(status);
}
static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend)
{
static long clktck = 0;
if( 0 == clktck )
{
clktck = sysconf(_SC_CLK_TCK);
if( clktck < 0 )
error_quit("sysconf error");
}
double temp;
temp = (double)real / clktck;
printf(" real: %0.2f
", temp);
temp = (double)(tmsend->tms_utime - tmsstart->tms_utime) / clktck;
printf(" user: %0.2f
", temp);
temp = (double)(tmsend->tms_stime - tmsstart->tms_stime) / clktck;
printf(" sys: %0.2f
", temp);
temp = (double)(tmsend->tms_cutime - tmsstart->tms_cutime) / clktck;
printf(" child user: %0.2f
", temp);
temp = (double)(tmsend->tms_cstime - tmsstart->tms_cstime) / clktck;
printf(" child sys: %0.2f
", temp);
}
예제 실행 (빨간색 글꼴 입력):
qch@ubuntu:~/code$gcc temp.c -o temp qch@ubuntu:~/code$ ./temp "sleep 5""date" command: sleep 5 real: 5.02 user: 0.00 sys: 0.00 child user: 0.00 child sys: 0.00 normal termination, exit status = 0 명령: 날짜 2012 년 08 월 22 일 수요일 23: 31: 58 PDT real: 0.02 user: 0.00 sys: 0.00 child user: 0.00 child sys: 0.02 normal termination, exit status = 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 구조체 클래스은 접근자 메서드가 있는 속성 모음입니다. 클래스를 명시적으로 작성할 필요 없이. Struct 클래스는 구성원 및 해당 값 집합을 포함하는 새 하위 클래스를 생성합니다. 각 멤버에 대해 #attr_accessor 와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.