ftok(3)

#include <sys/types.h>
#include <sys/ipc.h>

key_t ftok(const char *pathname, int proj_id);

pathname(존재하고 접근가능한 파일 또는 디렉토리)과 proj_id값의 조합으로 System V IPC에서 사용할 key값을 생성하는 함수입니다. pathname과 proj_id값이 같으면 같은 key를 생성합니다.  proj_id는 int type이지만 실제로는 하위 8bit만 사용됩니다.

 

 이 함수의 결과값은 msgget(2), semget(2), shmget(2)에서 사용가능합니다.

 

 

파라미터

pathname
    - 실제로 존재하고 access가능한 파일 또는 디렉토리
    - 상대 path이든 절대 path이든 실제로 같은 디렉토리 
      또는 파일이면 pathname의 문자열이 달라도 같이 인식됨

   예).
       /usr/downman/data 와 ~/data가 실제 같은 디렉토리이면 같은 값임.
   즉, 
      ftok("/usr/downman/data", 'S') == ftok("~/data", 'S')
proj_id
    - 같은 path에 대해서 구분하기 위한 값으로 하위 8bit값만 사용됩니다. 
    - 0은 사용할 수 없으며, 하위 8bit만 사용되므로 'M', 'S' 등과 같이 문자를 사용할 수도 있습니다.

 

RETURN

0 이상
    - 정상적으로 생성된 key값

-1
    -오류가 발생하였으며, 상세한 오류는 errno에 저장됩니다.
     stat(2)함수의 오류와 같은 오류가 발생할 수 있습니다.

 EACCES : path를 구성하는 directory중에서 search 권한(x)이 없어서 접근할 수 없습니다.
 EFAULT : path 변수 자체가 잘못된 주소입니다. 
 ELOOP : 너무 많은 symbolic link로 directory가 loop에 빠졌습니다.
 ENAMETOOLONG : path가 너무 길거나 이름이 너무 깁니다.
 ENOENT : path가 빈 문자열이거나 path를 구성하는 directory중에서 없는 directory가 있습니다.
 ENOMEM : 메모리가 부족합니다.
 ENOTDIR : path를 구성하는 directory중에서 directory가 아닌 것이 있습니다.
 EOVERFLOW : 32bit OS에서 컴파일시에 -D_FILE_OFFSET_BITS=64 옵션없이 컴파일하여 파일크기나 
      inode번호가 64bit에 맞지 않은 경우

 


활용 예제

 

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdlib.h>

......


int main(int argc, char **argv)
{
    int     shmid;
    int     mem_size;
    key_t   shm_key;
    struct  my_data_t *shm_data;

    ......

    /* shared memory용 IPC key를 생성함 */
    if((shm_key = ftok("~/mywork", 'H')) == -1) {
        perror("shared memory key 생성 오류");
        return 1;
    }

    mem_sie = sizeof(struct my_data_t) * 1000;
    shmid = shmget((key_t)shm_key, mem_size, 0600 | IPC_CREAT);

    if (shmid == -1) {
        perror("shmget failed ");
        return 1;
    }

    /* 생성된 shared memroy를 참조함 */
    shm_data = shmat(shmid, (void *)0, 0);
    
    if (shm_data == (void *)-1) {
        perror("shmat failed ");
        return 1;
    }

    ......

    return 0;
}

'C언어 header > sys | ipc.h' 카테고리의 다른 글

ftok(3) - System V IPC key 생성함수  (0) 2019.09.29
블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요