본문으로 바로가기
homeimage

c언어

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

    C언어 공유 메모리 정보 확인·변경·제거 함수 shmctl()

    C shmctl() 공유 메모리 정보 확인·변경·제거 함수 shmctl() 함수는 공유 메모리에 대한 정보를 구하거나 변경 또는 제거합니다. 헤더: sys/ipc.h, sys/shm.h 형태: int shmctl(int shmid, int cmd, struct shmid_ds *buf) 인수: int shmid 공유 메모리 식별 번호 int 제어 명령 struct shmid_ds *buf 공유 메모리 정보 구하기 위한 버퍼 포인터 반환: int 0 == 성공, -1 == 실패 struct shmid_ds 구조 3번째 인수 struct shmid_ds 구조는 아래와 같습니다. struct shmid_ds { struct ipc_perm shm_perm; /* 접근권한 */ int shm_segsz; /* ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 공유 메모리를 프로세스에서 분리 함수 shmdt()

    C shmdt() 공유 메모리를 프로세스에서 분리 함수 shmdt() 함수는 프로세스에 첨부된 공유 메모리를 프로세스에서 분리합니다. 헤더: sys/type.h, sys/shm.h 형태: int shmdt(const void *shmaddr) 인수: void *shmaddr 분리할 공유 메모리 주소 반환: int 0 == 성공, -1 == 실패 공유 메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말합니다. 이 공유 메모리를 이용하면 프로세스끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있습니다. 이렇게 같은 메모리 영역을 공유하기 위해서는 공유 메모리를 생성한 후에 프로세스의 자신의 영역에 첨부를 한 후에 마치 자신의 메모리를 사용하듯 사용..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 공유 메모리를 프로세스에 첨부 함수 shmat()

    C shmat() 공유 메모리를 프로세스에 첨부 함수 shmat() 함수는 공유 메모리를 마치 프로세스의 몸 안으로 첨부합니다. 헤더: sys/type.h, sys/shm.h 형태: void *shmat(int shmid, const void *shmaddr, int shmflg) 인수: int shmid 공유 메모리를 구별하는 식별 번호 void *shmaddr 첨부되는 어드레스 주소. 일반적으로 NULL을 지정 int shmflg 동작 옵션 shmflg 내용 SHM_RDONLY 공유 메모리를 읽기 전용으로 SHM_RND shmaddr이 NULL이 아닌 경우일 때만 사용되며, shmaddr을 반올림하여 메모리 페이지 경계에 맞춘다. 반환: - 공유 메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 공유 메모리 생성 함수 shmget()

    C shmget() 공유 메모리 생성 함수 shmget() 함수는 공유 메모리를 생성합니다. 헤더: sys/ipc.h, sys/shm.h 형태: int shmget(key_t key, int size, int shmflg) 인수: key_t key 공유 메모리를 구별하는 식별 번호 int size 공유 메모리 크기 int shmflg 동작 옵션 shmflg 옵션 내용 IPC_CREATE key에 해당하는 공유 메모리가 없다면 새로 생성한다. 만약있다면 무시하며 생성을 위해 접근 권한을 지정해 주어야 한다. IPC_EXCL 공유 메모리가 이미 있다면 실패로 반환하며 공유 메모리에 접근하지 못한다. 이 옵션이 없어야 기존 공유 메모리에 접근할 수 있다. 반환: -1 == 실패, -1 이외는 공유 메모리 생성..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 메시큐 상태 정보·변경·삭제 함수 msgctl()

    C함수 메시큐 상태 정보·변경·삭제 msgctl() msgctl()은 메시지 큐의 현재 상태 정보를 구할 수 있고, 변경하거나 아예 메시지 큐를 삭제할 수 있습니다. 헤더: sys/types.h, sys/ipc.h, sys/msg.h 형태: int msgctl ( int msqid, int cmd, struct msqid_ds *buf ) 인수: int msqid 메시지 큐 식별자 int cmd 제어 명령 struct msqid_ds *buf 메시지 큐 정보를 받을 버퍼 반환: 0 == 성공, -1 == 실패 msqid는 메시지 큐의 식별 번호입니다. 두 번째 인수인 cmd는 아래와 같은 명령입니다. cmd 의미 IPC_STAT 메시지 큐의 현재 상태를 buf에 저장합니다. IPC_SET 메시지 큐의 상..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 메시지 큐로부터 데이터 수신 함수 msgrcv()

    C함수 메시지 큐로부터 데이터 수신 msgrcv() 메시지 큐로부터 데이터를 수신합니다. 헤더: 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; char data_buf..
  • 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 유닉스에서는 작은 것이 아름답..
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

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