그냥 혼자 공부중인데

shm_open이랑 shm_unlink가 참조오류 뜸;

이유를 모르겠는게;;

man page에 나와있는거 참조해서 해봐도

웹 man page에 있는 내용 적용해봐도

언디파인이라네;;

소스에 뭔가 문제가 있는건가?;;

----------------------source----------------------------

 


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>              //errno
#include <string.h>             //memcpy

#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>

#define         NAME_POSIX_SHM  \"/proj_mytest\"
#define         SZ_SHM_SEGMENT  1024

int shm_fd;
char* shm_ptr;

int main(){
        char a_input[0xff];
        printf(\"* SHM Nmae : %s\",NAME_POSIX_SHM);
        if( (shm_fd = shm_open(NAME_POSIX_SHM, O_RDWR|O_CREAT|O_EXCL, 0660) ) > 0){
                printf(\"* Create SHM\\n\");
                if( ftruncate(shm_fd, SZ_SHM_SEGMENT) == -1) exit(EXIT_FAILURE);
        }else{
                if( errno != EEXIST ) {
                        printf(\"FAIL:shm_open() : %s\\n\", strerror(errno)); exit(EXIT_FAILURE);
                }

                shm_fd = shm_open(NAME_POSIX_SHM, O_RDWR, 0660);
                if(shm_fd == -1){
                        //error!
                }
        }
        shm_ptr = (char*)mmap(NULL, SZ_SHM_SEGMENT, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
        if(shm_ptr == MAP_FAILED){
                printf(\"FAIL:mmap()\\n\");
                exit(EXIT_FAILURE);
        }

        printf(\"\'*\' Print current shm.\\n\");
        printf(\"\'.\' EXIT. \\n\");
        printf(\"otherwise change shm to your input.\\n\");
        while(1){
                printf(\"\\n>>\");
                if(fgets(a_input, sizeof(a_input), stdin) == NULL){
                        //error!
                }
                if(a_input[0] == \'.\'){
                        break;
                }else if(a_input[0] == \'*\'){
                        printf(\"shm -> \'%.*s\'\\n\",SZ_SHM_SEGMENT, shm_ptr);
                }else{
                        memcpy(shm_ptr, a_input, strlen(a_input));
                }
        }
        munmap(shm_ptr, SZ_SHM_SEGMENT);
        printf(\"* Would you remove shm (name : %s) (y/n)\", NAME_POSIX_SHM);
        fgets(a_input, sizeof(a_input),stdin);
        if(a_input[0] == \'y\')
                shm_unlink(NAME_POSIX_SHM);

        return 0;

}

* 요건 man page 시놉시스부분

SYNOPSIS
       #include <sys/types.h>
       #include <sys/mman.h>
       #include <fcntl.h>           /* For O_* constants */

       int shm_open(const char *name, int oflag, mode_t mode);

       int shm_unlink(const char *name);


.


예제를 따라치는 것도 오랜만인데 이렇게 예제에 뒤통수 맞는건 더 오랜만이야;;;
어휴 살려주엉;; 갑갑해 미치겠음;;