C & LINUX

    C / LINUX 디몬 코딩 규칙 daemon

    함수 기능 디몬 프로세스는 백그라운드에서 긴 시간 동작하는 프로세스이다. 디몬프로세스는 부팅시 실행되어 OS가 해야할 일들을 수행한다. 안정적인 디몬수행을위해 규칙에 맞추어 프로그램을 수행하여야한다. 함수 1. 백그라운드 수행이 되어야 한다. 2. 프로세스 그룹에서 탈퇴, 새로운 프로세스 그룹을 생성한다. 3. 터미널 입출력 시그널을 무시한다. 4. 파일 모드 생성 마스크를 해제한다. 5. 현재 디렉토리를 루트 디렉토리로 생성한다. 6. 오픈되는 모든 파일 디스크립터를 닫는다. 7. 표준 입출력과 표준 에러를 /dev/null로 재지정한다. 함수 예제 #include #include #include #include #include #include #include #include int ssu_daemon..

    C / LINUX sigpending(2)

    함수 기능 팬딩 중이거나, 블록되었을 때 발생한 시그널 집합을 가져오는 시스템호출 함수 함수 원형 #include int sigpending(sigset_t *set) 함수 파라메터 set 인자가 가리키는 곳에 호출한 프로세스에 시그널이 블록되어있으며 현재 팬딩 중인 시그널들의 집합을 저장한다. 함수 예제 #include #include #include #include int main(void) { sigset_t pendingset; sigset_t sig_set; int count = 0; //sig_set을 1로 초기화 sigfillset(&sig_set); //sig_set이 프로세스의 시그널 마스크가 됨 sigprocmask(SIG_SETMASK, &sig_set, NULL); while(1) ..

    C / LINUX sigprocmask(2)

    함수 기능 현재의 시그널 마스크를 검사하거나 변경하는 시스템 호출 함수이다. 일반적으로 sigprocmask는 시그널을 블록시키고 특정작업의 실행을 마치고나면 블록을 해제하는데 사용된다. 함수 원형 #include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 함수 파라메터 how 시그널 마스크의 구체적인 변경 방법을 정의하는 상수 값 set 마스크하거나 마스크를 해제할 시그널 집합의 주소를 나타냄. oldset 이전 시그널 설정 값을 저장할 시그널 집합의 주소를 나타냄 함수 예제 #include #include #include #include int main(void) { sigset_t sig_set; int count; //sig..

    C / LINUX alarm(2)

    함수 기능 프로세스에 sigalrm을 전달하는 시스템호출 함수이다. 함수 원형 #include unsigned int alarm(unsigned int seconds); 함수 파라메터 seconds 타이머로 사용될 초 단위의 값 함수 예제 #include #include #include #include #define LINE_MAX 2048 static void ssu_alarm(int signo); int main(void){ char buf[LINE_MAX]; int n; if(signal(SIGALRM, ssu_alarm)==SIG_ERR){ fprintf(stderr,"SIGALRM error\n"); exit(1); } alarm(10); if((n=read(STDIN_FILENO, buf, L..

    C / LINUX raise(3)

    함수 기능 raise는 자기자신에게 시그널을 보내는 함수이다. ANSI C 에는 정의되어있으나 POSIX.1에는 정의되어 있지 않다 함수 원형 #include int raise(int sig); 함수 파라메터 sig signal을 넣으면 됨 함수 예제 #include #include #include void ssu_signal_handler1(int signo); void ssu_signal_handler2(int signo); int main(void){ if(signal(SIGINT, ssu_signal_handler1)==SIG_ERR){ fprintf(stderr,"cannot handle SIGINT\n"); exit(EXIT_FAILURE); } if(signal(SIGUSR1, ssu_sig..

    C / LINUX signal(2)

    함수 기능 지정한 시그널의 처리 방식을 등록하는 시스템 호출 함수이다. 함수 원형 #include sighandler_t signal(int signum, sighandler_t handler); 함수 파라메터 signal 인자에는 시그널 값을 넣는다. handler SIG_IGN 상수 , SIG_DFL상수, 시그널 발생시 호출될 함수의 주소를 넣을 수 있다. 함수 예제 #include #include #include #include static void ssu_signal_handler(int signo); int main(void){ if(signal(SIGINT, ssu_signal_handler)==SIG_ERR){ fprintf(stderr,"cannot handle SIGINT\n"); exi..

    C/LINUX _t 자료형

    기능 _t 자료형은 primitive 자료형이라고 한다. 과거와 달라진 자료형의 표현방식 때문에 이렇게 생겨난 것이다. 32비트 , 64비트의 변화차이때문에 사용을 많이한다. 그냥 일반적인 자료형으로 생각해도될듯 ssize_t - signed int size_t - unsigned int pid_t - PID 저장 타입

    C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3)

    함수 기능 exec 계열 함수는 현재 수행되고 있는 프로세스를 대신하여 새로운 프로세스를 수행시키는 함수 -l argument list -v argument vector -e 환경변수 유무 -p p있으면 filename 없으면 pathname ex ) execvp 는 argument vector + filename 함수 원형 #include int execl(const char *filepath, const char *arg0, ... /* (char *) 0 */); int execv(const char *filepath, char *const argv[]); int execle(const char *filepath, const char *arg0, ... /* (char *) 0, char *cons..

    C / LINUX wait(2) waitpid(2)

    함수 기능 프로세스의 종료 상태를 회수하는 시스템 호출 함수 자식프로세스의 종료가 언제 발생할지 부모프로세스는 알 수 없으므로 커널은 시근ㄹ을 통해 부모 프로세스에게알림 wait 가장 먼저 종료된 자식 프로세스 기다림 waitpid 특정한 자식프로세스를 지정 함수 원형 #include #include pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options); 함수 파라메터 statloc 종료될때 상태 값 pid wait할 pid id 함수 예제 wait1 #include #include #include #include #include #define EXIT_CODE 1 int main(void){ pid_t pid; int..

    C / LINUX getpid(2) getppid(2) getuid(2) geteuid(2) getgid(2) getegid(2)

    함수 기능 pid들을 리턴하는 시스템 호출 함수 함수 원형 #include #include pid_t getpid(); pid_t getppid(); uid_t getuid(); uid_t geteuid(); gid_t getgid(); gid_t getegid(); 리턴 값 : getpid(2) - 호출한 프로세스의 프로세스 ID getppid(2) - 호출한 프로세스의 부모 사용자 ID getuid(2) - 호출한 프로세스의 실제 사용자 ID geteuid(2)- 호출한 프로세스의 유효 사용자 ID getgid(2) - 호출한 프로세스의 유효 그룹 ID getegid(2) - 호출한 프로세스의 유효 그룹 ID 함수 예제 #include #include #include #include int main(..