반응형
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
반응형
'C언어 header > fcntl.h' 카테고리의 다른 글
open(2) - 파일을 읽거나 쓰기 위해 열기 (0) | 2019.09.23 |
---|