ex1. 명령행 인자로 PID를 입력받아 해당 프로세스가 속한 프로세스 그룹 ID(PGID)를 출력하는 프로그램을 작성하시오. 명령행 인자로 지정된 PID가 0이면 현재 프로세스를 대상으로 PPID와 PGID를 구한다
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
if (argc == 1) {
printf("Input pid.\n");
exit(1);
}
int pid;
pid = atoi(argv[1]);
if (pid == 0) {
pid = getpid();
printf("PPID : %d\n", getppid());
}
printf("PID : %d\n", pid);
printf("PGID : %d\n", getpgid(pid));
return 0;
}
ex2. 다음과 같이 프로그램 내에서 sleep() 함수를 사용해 5초간 잠들게 했을 때 전체 수행시간은 어떻게 되는지 프로그램을 작성해 확인하시오
int main() {
sleep(5);
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/times.h>
#include <time.h>
#include <unistd.h>
int main() {
int i;
time_t t;
struct tms mytms;
clock_t ct, t1, t2;
ct = sysconf(_SC_CLK_TCK);
if ((t1 = times(&mytms)) == -1) {
perror("times 1");
exit(1);
}
sleep(5);
if ((t2 = times(&mytms)) == -1) {
perror("times 2");
exit(1);
}
printf("real time : %.1f sec\n", (double)(t2 - t1) / ct);
printf("user time : %.1f sec\n", (double)mytms.tms_utime / ct);
printf("system time : %.1f sec\n", (double)mytms.tms_stime / ct);
return 0;
}
A2. 전체 수행시간은 5초가 더 추가된다
ex3. 명령행 인자로 입력받은 환경 변수의 값을 출력하는 프로그램을 작성하라
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("usage: ex1 name\n");
exit(1);
}
char* val;
val = getenv(argv[1]);
if (val == NULL) {
printf("%s not defined\n", argv[1]);
} else {
printf("%s = %s\n", argv[1], val);
}
}
ex4. putenv() 함수를 사용해 환경 변수 SHELL의 값을 변경하는 프로그램을 작성하라. 이때 변경할 값은 명령행 인자로 받는다.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("Usage: ex2 value\n");
exit(1);
}
char* val;
char str[256];
val = getenv("SHELL");
if (val == NULL) {
printf("SHELL not defined\n");
} else {
printf("1. SHELL = %s\n", val);
}
sprintf(str, "SHELL=%s", argv[1]);
putenv(str);
val = getenv("SHELL");
printf("2. SHELL = %s\n", val);
return 0;
}
ex5. setenv() 함수를 사용해 환경 변수 TESTENV를 새로 정의하고 그 값을 ubuntu로 설정, getenv() 함수로 검색해 출력하는 프로그램을 작성하라
#include <stdio.h>
#include <stdlib.h>
int main() {
char* val;
setenv("TESTENV", "ubuntu", 0);
val = getenv("TESTENV");
if (val == NULL) {
printf("TESTENV not defined\n");
} else {
printf("TESTENV = %s\n", val);
}
return 0;
}
참고 및 출처: 시스템 프로그래밍 리눅스&유닉스(이종원)
'Computer Science > UNIX & Linux' 카테고리의 다른 글
[UNIX/Linux] ep7+) 프로세스 생성과 실행 함수 실습 (0) | 2024.10.22 |
---|---|
[UNIX/Linux] ep7) 프로세스 생성과 실행 (1) | 2024.10.21 |
[UNIX/Linux] ep6) 프로세스 정보 (4) | 2024.10.12 |
[UNIX/Linux] ep5) 시스템 정보 (1) | 2024.10.10 |
[UNIX/Linux] ep4+) 고수준 파일 입출력 함수 실습 (0) | 2024.10.07 |