creat(2)

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

int creat(const char *pathname, mode_t mode);

기존의 파일 또는 새로운 파일을 쓰기 전용으로 open합니다.

 open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode); 와 똑같은 함수입니다.

 

 

파라미터

pathname
    - open할 파일명에 대한 fullpath 또는 상대 path.
mode
    - mode: 파일에 대한 access 권한을 설정합니다. 
     파일 acces 권한은 umask(2)값의 영향을 받으며, (mode & ~umask) 값으로 권한이 설정됩니다. 
     mode의 값은 아래의 상수들을 bit-or 연산으로 설정가능합니다.

 S_IRWXU : (00700) - owner에 대한 읽기, 쓰기, 실행권한 모두 설정
 S_IRUSR : (00400) - owner에 대한 읽기 권한
 S_IWUSR : (00200) - owner에 대한 쓰기 권한
 S_IXUSR : (00100) - owner에 대한 실행 권한
 S_IRWXG : (00070) - group에 대한 읽기, 쓰기, 실행권한 모두 설정
 S_IRGRP : (00040) - Group에 대한 읽기 권한
 S_IWGRP : (00020) - Group에 대한 쓰기 권한
 S_IXGRP : (00010) - Group에 대한 실행 권한
 S_IRWXO : (00007) - Other에 대한 읽기, 쓰기, 실행권한 모두 설정
 S_IROTH : (00004) - Other에 대한 읽기 권한
 S_IWOTH : (00002) - Other에 대한 쓰기 권한
 S_IXOTH : (00001) - Other에 대한 실행 권한

 

RETURN

0
    - 정상적으로 파일을 열었으며, 열려진 파일의 file descriptor입니다.


-1
    - 오류가 발생하였으며, 상세한 오류 내용은 errno에 설정됩니다.

 EACCES : 파일 access 권한이 없음.
 EDQUOT : O_CREAT일 때, 사용자별 할당된 disk용량이 없거나 inode가 고갈되어 생성할 수 없음.
 EEXIST : O_CREAT | O_EXCL 일 때 이미 파일이 존재함.
 EFAULT : pathname 변수의 pointer가 access가능한 메모리 영역이 아님.
 EFBIG  : 32bit OS에서 2GB이상의 파일을 생성한 경우
 EINTR  : signal이 발생함.
 EISDIR : pathname가 directory라서 O_WRONLY 또는 O_RDWR 로 열지 못함.
 ELOOP  : path를 찾는 중에 symbolic link가 중첩되어 있거나 O_NOFOLLOW로 open했는 데, pathname이 symbolic link임.
 EMFILE : 파일이 너무 많이 open되어 더 open할 수 없음.
 ENAMETOOLONG : pathname이 너무 긴 문자열임(즉, 파일명 또는 fullpath 최대 문자수를 초과함)
 ENFILE : 시스템에서 열 수 있는 최대 파일 open 갯수를 초과함.
 ENODEV : pathname가 특수 파일이라서 열 수 없음
 ENOENT : 없는 파일인데, O_CREAT 설정이 없거나 symbolic link에 연결된 파일이 없음.
 ENOMEM : 할당할 메모리 부족
 ENOSPC : pathname 새로운 파일을 생성할 공간이 없음.
 ENOTDIR: pathname에 없는 디렉토리 구성이 있거나 O_DIRECTORY가 설정되었는 데, pathname이 디렉토리가 아닌 경우
 ENXIO  : O_NONBLOCK | O_WRONLY 설정해놓고 읽기를 하는 경우
 EOVERFLOW : 32bit OS에서 2GB이상의 파일을 생성한 경우
 EPERM  : O_NOATIME flag가 설정되었는 데, 권한이 없음.
 EROFS  : pathname이 readonly device에 O_WRONLY 또는 O_RDWR가 설정됨.
 ETXTBSY: pathname가 실행하고 있는 실행파일에 대해서 write하려고 함.
 EWOULDBLOCK : O_NONBLOCK flag가 설정되어 읽기/쓰기할 상태가 아님.

 


활용 예제

 

 

Sample

#include <sys/type.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>

int fd;

......

if((fd = creat("myfile.txt", 0644)) == -1) {
    fprintf(stderr, "myfile.txt 파일을 open도중 오류 발생: %s\n", strerror(errno));
    return -1;
}

......

 


see also: System Call File I/O Library

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요