ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Linux] 기말 헷갈림 모음
    LinuxProgramming 2023. 12. 19. 11:34

    [signal]

     

    WIFSIGNALED(status) : signal로 exited 되었으면
    WTERMSIG(status) : terminate 시킨 signal 확인

    SIG_IGN
    SIG_DFL

    fork exec 하면 signal table도 복사됨
    alarm은 자식까지 전달 x
    alarm(0) -> alarm 취소
    sighandler 한테는 동일한 종류의 signal은 1개만 전송됨
    sighandler에서 signal 처리는 stack으로 누적됨

    sigprocmask -> signal block
    풀기 전까지 BLOCK만 하는거지 푼 후에는 적립된 signal들을 받는다!
    적용대상은 인자에 없는데 무조건 이 코드가 쓰여진 프로세스 blocked signal set이기 때문

    sigprocmask(SIG_SETMASK, &mask, NULL);
    sigprocmask(SIG_UNBLOCK, &mask, NULL);
    ----------
    [mmap]

    1. mmap은 애초에 open할때 무조건 READ 퍼미션있게 open해야함(O_RDWR, O_RDONLY)
    2. mmap 마지막 인자 무조건 0 아님 page size 배수 -> 아니면 segmentation fault
    3. 새로 만들고 ftruncate 안하면 bus 오류
    4. 만약 ftruncate로 줄이면 다른건 다 0으로 찬다

    ----------
    [pipe]

    FD_SET(파이프번호, &master);

    write_end 닫으면 read pipe에게 0 전달
    read_end 닫으면 write pipe에게 SIGPIPE signal 전달

    fcntl(p[0][0], F_SETFL, O_NONBLOCK);
    -> read pipe는 읽을게 없어도 읽기 수행. 뭐가 들어오기 전까지 0을 계속 읽게 됨.

    ----------
    [select]

    read가 0이면 write_end가 닫혔다는 뜻
    따라서 FD_CLR로 해당 파이프를 fd_set에서 0으로 만들어주면 됨

    timeout
    일정기간 조사하는 fd_set에 변화가 없으면 종료
    ----------
    [fifo]

    open( // , O_NONBLOCK);
    fifo는 두 명 다 준비되어야 통신가능
    O_NONBLOCK이면 상대방이 준비 안되어 있으면 -1 return 하면서 걍 종료

    ----------
    [msgqueue]

    mtype
    long type의 정수
    모든 message의 첫부분에 있어야한다
    양수만 가능!!

    ----------
    [semaphore]

    ushort buf1[3] = {1,2,3}; -> semaphore 초기화
    struct sembuf p_buf[2] = {{0,-1,0}, {1,-1,0}}; -> semop 연산

    semval은 0 아님 양수만 가능

    semget는 무조건 0600. sem값을 바꾸는 semop를 하기 위해서는 무조건 READ WRITE가 가능해야하기 때문.

    semncnt(nqueue)
    semwait 프로세스 수. 자신이 연산을 할 수 있을때까지 기다리는 프로세스 수 
    semzcnt(zqueue)
    semaphore zero count. 0이 되길 기다리는 프로세스 수

    p_buf = {0,0,0} (0연산)
    -> sem이 0될때까지 기다리는 semop

    semctl(semid, IPC_RMID, 0);

    ----------
    [shared memory]

    shmctl(shmid, IPC_RMID, 0);

    ----------
    [flock]

    fcntl(fd, F_SETLK, &lock); // nonwait lock or unlocking
    fcntl(fd, F_SETLKW, &lock); // waiting lock

    F_RDLCK
    F_WRLCK

    'LinuxProgramming' 카테고리의 다른 글

    [Linux] 2023 fall unix programming 후기  (0) 2023.12.27
    [Linux] flock() (record locking)  (0) 2023.12.15
    [Linux] producer consumer in bounded array  (1) 2023.12.10
    [Linux] 과제4 : 카카오톡  (1) 2023.12.08
    [Linux] shared memory  (2) 2023.12.08