본문으로 바로가기
homeimage

컴퓨터/프로그래밍

해당되는 글 307
  • thumbnail
    컴퓨터/프로그래밍

    C언어 메시지 큐로 데이터 전송 함수 msgsnd()

    C함수 메시지 큐로 데이터 전송 msgsnd() 메시지 큐를 전송합니다. 헤더: sys/types.h, sys/ipc.h, sys/msg.h 형태: int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg) 인수: int msqid 메시지 큐 식별자 void *msgp 전송할 자료 size_t msgsz 전송할 자료의 크기 int msgflg 동작 옵션, 위의 설명 글을 참고하여 주십시오. 반환: 0 == 성공, -1 == 실패 msgid는 메시지 큐의 식별자 입니다. msgp는 msgget()에서 설명을 드렸습니다만 전송 대상인 데이터 입니다. 메시지 큐에 전송되는 데이터 구조는 아래와 같습니다. struct { long data_type; c..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 메시지 큐 생성 함수 msgget()

    msgget() function in C language 메시지 큐를 생성합니다. 헤더: sys/types.h, sys/ipc.h, sys/msg.h 형태: int msgget ( key_t key, int msgflg ) 인수: key_t key 시스템에서 다른 큐와 구별되는 번호 int msgflg 옵션 반환: -1 == 실패, 이외는 메시지 큐 식별자 메시지 큐는 IPC 방법 중에 하나로 자료를 다른 프로세스로 전송할 수 있습니다. 전송되는 자료도 큐의 용량이 허용하는 한, 상대편이 가져가지 않는다고 하더라도 계속 전송할 수 있으며, 나중에 다른 프로세스가 큐가 비워질 때까지 계속 읽어 들일 수 있습니다. 또한 메시지 큐는 전송한는 자료를 커널이 간직하기 때문에 전송한 프로세스가 종료되었다고 하더라..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 FIFO 파이프 만들기 함수 mkfifo()

    C함수 mkfifo FIFO 파이프 만들기 pipe()에서 생성한 파이프를 이용하는 것은 부모와 자식 프로세스에서만 사용됩니다. 그러나 FIFO를 이용하면 서로 다른 프로세스에서 사용할 수 있으며, FIFO를 생성하는 파일 이름을 알고 있다면 누구나 사용할 수 있습니다. mkfifo() 함수로 FIFO 파일을 생성하면 이후로는 이 파일을 가지고 파이프로 이용할 수 있습니다. 또한 FIFO 파일이 이미 존재하면 에러가 발생하므로 새로 생성할 필요가 있다면 삭제하시고 실행합니다. 헤더: sys/types.h, sys/stat.h 형태: int mkfifo(const char *pathname, mode_t mode) 인수: char *pathname 파이프로 사용할 파일 이름 mode_t mode FIFO ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 파이프를 이용한 IPC 함수 pipe()

    C함수 파이프를 이용한 IPC pipe() 프로세스 간의 통신(IPC)에서 사용하는 파이프를 생성합니다. 헤더: unistd.h 형태: int pipe(int filedes[2]) 인수: int filedes[2] 파이프의 입출력 디스크립터 반환: 0 == 성공, -1 == 실패 pipe()에서 생성하는 파이프는 프로세스 안에 생성되는 것이 아니라 커널에 생성되며 프로세스에는 다만 파이프를 이용할 수 있는 파일 디스크립터만 제공됩니다. 그러므로 하나의 프로세스에서 파이프를 생성했다고 해도 다른 프로세스에서 그 디스크립터를 사용할 수 있다면, 그 디스크립터를 이용하여 서로 통신할 수 있습니다. 그러나 pipe()에서 생성한 파이프의 문제점은 입출력 방향이 결정되어 있다는 점이니다. pipe()를 실행하면 ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 파이프 닫기 함수 pclose()

    C함수 파이프 닫기 pclose() popen()에서 열기를 한 파이프 핸들 사용을 종료합니다. 헤더: stdio.h 형태: int pclose( FILE *stream) 인수: FILE *stream 닫기를 할 파일 포인터 반환: -1 != 성공, -1 == 실패 C언어 pclose() 함수 예제 예제에서는 route 명령을 실행하여 그 결과를 화면에 출력합니다. 예제 내용은 간단합니다만 읽어 들인 문자열을 가공한다면 게이트웨이 정보를 구할 수 있습니다. #include #define BUFF_SIZE 1024 int main( void) { char buff[BUFF_SIZE]; FILE *fp; fp = popen( "route", "r"); if ( NULL == fp){ perror( "pope..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 파이프 생성 함수 popen()

    C함수 파이프 생성 popen() popen() 함수는 파이프 기능을 이용하여 다른 프로그램의 실행 결과를 읽어 들이거나, 다른 프로그램의 표준 입력 장치로 출력할 수 있습니다. 헤더: stdio.h 형태: FILE *popen(const char *command, const char *type) 인수: char *command 실행할 명령어 char *type 통신 형태 반환: NULL != 파일 포인터, NULL == 실패 유닉스에서는 프로그램에서 표준 출력 장치로 출력한 내용을 다른 프로그램의 입력으로 전송할 수 있습니다. 이를 파이프라고 하는데, 예로 파일 목록 중에 ff 문자가 있는 파일을 검색한다면 아래와 같이 실행할 것입니다. ]$ ls -al | grep ff 유닉스에서는 작은 것이 아름답..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 레코드 잠금 함수 fcntl()

    C함수 fcntl() 레코드 잠금 fcntl() 함수는 파일을 전체나 파일의 일부를 다른 프로세스에서 사용하는 것을 제한 해 주는 함수입니다. 헤더: unistd.h, fcntl.h 형태: int fcntl(int fd, int cmd, struct flock * lock) 인수: int fd 제어 대상 파일 디스크립터 int cmd 제어 동작 명령 struct flock * lock 잠금을 위한 옵션 반환: -1 == 실패, 이외는 cmd에 따라 달라짐 파일을 열기할 때 open() 함수나 fopen() 함수의 mode를 이용하여 다른 프로세스가 읽기나 쓰기를 제한할 수 있습니다. 그러나 이것은 파일 전체에 대해 적용되며 제한을 변경하기 위해서는 파일을 닫았다가 다시 열열어 합니다. fcntl()은 오..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 블록 설정 및 대기 함수 sigsuspend()

    C함수 시그널 블록 설정 및 대기 sigsuspend() sigsuspend() 함수는 시그널 블록을 설정함과 동시에 시그널이 도착할 때까지 중단합니다. 즉, 아래와 같은 처리가 됩니다. sigprocmask( SIG_SETMASK, &sert, NULL); pause(); 그러나 sigprocmask() 호출과 pause() 호출 사이에도 시그널이 발생할 수 있는데, 이때 발생한 시그널은 잃어버릴 수 있다고 합니다. 예를 들어서 어떨 때는 Ctrl-C 한 번만 누르면 프로그램이 종료되는데, 어떨 때는 2번 눌러야 종료되는 현상 같은 것이죠. 그러므로 블록 설정과 동시에 시그널 도착을 바로 확인해야 시그널을 잃어버리는 일이 없을 것입니다. 이렇게 블록 설정과 함께 시그널을 대기하는 함수가 sigsuspe..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 블록된 시그널 확인 함수 sigpending()

    C함수 블록된 시그널 확인 sigpending() sigpending() 함수를 사용하면 시그널을 블록된 상태에서 어떤 시그널이 발생해서 블록되었는지를 알 수 있습니다. 즉, 발생했지만 블록되어 대기 중인 시그널이 무엇인지를 확인합니다. 헤더: signal.h 형태: int sigpending(sigset_t *set) 인수: sigset_t *set 블록화된 시그널 집합을 담을 변수 반환: 0 == 성공, -1 == 실패 C언어 sigpending() 함수 예제 #include #include #include int main( void) { sigset_t sigset; sigset_t pendingset; int ndx = 0; // 모든 시그널을 블록화 sigfillset( &sigset); sig..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 대기 상태로 설정 함수 sigpromask()

    C함수 시그널 대기 상태로 설정 sigpromask() 다른 일에 방해받지 말고 매우 중요한 일을 반드시 처리해야 할 경우가 있습니다. 매우 중요한 일이라 시그널이 발생하더라도 일을 먼저 처리하고 나중에 발생한 시그널을 처리하고 싶습니다. 이렇게 시그널이 발생하더라도 대기상태로 만들어 주는 함수가 sigprocmask()입니다. 헤더: signal.h 형태: int sigprocmask(int how, const sigset_t *set, sigset_t *oldset) 인수: int how 시그널 집한을 어떻게 처리할지 방법을 지정 sigset_t *set 이번에 설정할 시그널 집합 sigset_t *oldset 이전에 블록된 시그널 집합 반환: 0 == 성공, -1 == 실패 시그널 집합에 대해 ho..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 지정 시간에 SIGALRM 전송 함수 alarm()

    C함수 지정 시간에 SIGALRM 전송 alarm() 지정한 시간이 되면 자기 자신에게 SIGALRM이 전송합니다. 프로세스는 SIGALRM을 받으면 종료되므로 유의해야 합니다. 알람처럼 주기적으로 호출 받으려면 사용자 시그널 핸들을 사용하면 됩니다. 헤더: unistd.h 형태: unsigned int alarm(unsigned int seconds) 인수: unsigned int seconds seconds 초 후에 시그널 전송 반환: unsigned int 0 == 이전에 설정한 알람 없음 0 < 이전에 alarm() 호출로 시그널이 발생하기 까지 남은 시간 C언어 alarm() 함수 예제 1 3초 후에 SIGALARM 호출합니다. #include #include int main( void) { i..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 프로세스 자신에게 시그널 전송 함수 raise()

    C raise 함수 프로세스 자신에게 시그널 전송 raise()는 프로세스 자신에게 시그널을 보낼 때 사용합니다. kill() 함수를 구현한다면 아래와 같습니다. 헤더: signal.h 형태: int raise(int sig) 인수: int sig 전송하려는 시그널 번호 반환: == 0 성공 != 0 실패 C언어 raise() 함수 예제 #include #include #include int main( void) { int count = 0; while( 1 ){ printf( "count %d\n", count++); if ( 3 == count){ raise( SIGKILL); } sleep( 1); } } C언어 raise() 예제 실행 결과 ]$ ./a.out 카운트 다운 3 count 0 cou..
    최근글
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

    이모티콘을 클릭하면 댓글창에 입력됩니다.