Asynchronous I/O 관련 함수
·
LINUX/Linux
[aiocbp 구조체] 이외에도 int aio_reqprio //priority offset요청 필드가 있지만 생략했다. [aio_sigevent] 구조체 aio_sigevent.sigev_notify // 2가지 옵션을 갖는데 이 옵션에 따라 I/O 처리 후 시그널 여부가 결정된다. SIGEV_NONE -> 운영체제가 I/O 완료시 시그널을 발생시키지 않음. SIGEV_SIGNAL -> 운영체제는 aio_sigevent.sigev_signo에서 지정한 시그널을 생성함. Interface int aio_read(struct aiocb *aiocbp) Parameter aiocb 구조체 포인터변수 Function 입력된 구조체에 지정된 파일로부터 aio_bytes만큼 aio_buf에서 읽어온다. Retur..
sigsuspend 함수
·
LINUX/Linux
sigsuspend함수 이전에 pause함수 프로세스를 일시 중단시키는 함수부터 아라보자. sigsuspend Interface int sigsuspend(sigset_t *sigmask) Parameter sigmask: process를 중단시킴과 동시에 블록(무시할) signal set Function 호출한 프로세스를 중단시킴과 동시에 시그널 셋을 블록시킴. Return Always -1 errno 설정 sigfillset(&sigmost); // 모든 시그널을 sigmost에 포함! sigdelset(&sigmost, signum); // 모든 시그널 중 signum만 제외시킴 sigsuspsend(&sigmost); // signum을 제외한 모든 시그널을 Block시킴과 동시에 프로세스 중단 ..
Signal mask, set 함수
·
LINUX/Linux
Signal mask: 현재 Process가 블록시키고 있는 signal들의 집합 목록 이렇게 시그널 마스크를 다루기 위한 함수들을 아라보자.. 함수 기능 int sigaddset(sigset_t *set, int signo) 시그널 set에 특정한 시그널번호를 추가 int sigdelset(sigset_t *set, int signo) 시그널 set에 특정한 시그널번호를 삭제 int sigemptyset(sigset_t *set) 이미 세팅된 시그널 마스크 목록의 모든 시그널을 삭제 int sigfillset(sigset_t *set) 해당 시그널 세트에 모든 시그널을 포함 int sigismember(sigset_t *set) 해당 시그널 세트에 등록된 시그널이 있는지 체크 sigismemeber 함..
Signal 생성 함수, 예제
·
LINUX/Linux
모든 시그널은 SIG_ 로시작하는 Symbolic name을 가진다. 각각의 Signal에 대한 기본동작은 이미 OS단에서 정의되어있다. 더 자세히 설명하면? 시그널은 프로세스의 PCB 블록에 담겨있는 SIGNAL 관련 자료구조에 기본적인 액션이 명세되어있고, 이 기본 액션에 따라서 시그널이 도착하는 시점에 프로세스가 동작한다, 물론 sigaction 같은 함수를 통해 동작의 재정의가 가능하다. POSIX에서 지정한 시그널 번호와 이름은 다음과 같다. Signal symbolic name Signal Number default action Signal 0: question process alive? 0 SIGHUP 1 SIGINT 2 프로세스에 인터럽트를 발생시켜 죽임 ( Ctrl+C ) SIGQUIT ..
Signal 개념
·
LINUX/Linux
Siganl 시그널이란? Kernel or Process 에서 다른 process에게 어떤 사건이 발생했음을 알려주는 소프트웨어적인 통지(이벤트) Signal lifetime: 시그널 생성 시점부터 process에게 전달되는 시점까지 [Signal Handler] When process catch the signal , do specific action [Signal Pending] Signal that has been generated, but not yet delivered is said to be pending [Singal mask] 시그널을 블록시키는것, 시그널 마스크는 블록된 시그널의 리스트를 가진다. SIGNAL을 받은 시점에서 해당 프로세스의 ACTION Signal IGNORE SIgna..
pthread 함수 예제2
·
LINUX/Linux
프로그램 목적 각각 매개변수의 값 (0~9)를 출력하는 10개의 쓰레드를 생성하여 화면에 쓰레드 아이디-매개변수값 0~9를 출력하는 프로그램을 만들어보자. 도중에 쓰레드 생성에 실패하면 실패 에러메시지를 띄우고 해당 id의 쓰레드의 값은 출력하지 않고 다음라인으로 넘어간다! 이 코드에는 문제가 있다! 모든 쓰레드가 0~9이 아니라 10을 출력한다 for (i = 0; i < NUMTHREADS; i++) if (perror = pthread_create(tid + i , NULL, printarg, (void *)&i)) { // ~~ (중략) } 이 코드가 원인이다. 사실 pthread_create를 호출하면 메인은 OS에게 "쓰레드를 생성해줘!"라고 요청을 보내고 '요청에 성공!'하기만 하면 0을 바..