/* file_create.c: create a new file, by mjson. jinn_o@naver.com */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#define MAX_BUF 64
char fname[]="newfile.txt";
char dummy_data[]="abcdefg\n";

int main(){
    int fd,write_size,read_size;
    char buf[MAX_BUF];
    
    fd=open(fname,O_RDWR|O_CREAT|O_EXCL,0664);
    if(fd<0){
        printf("Can`t create %s file with errno %d\n",fname,errno);
        exit(1);
    }
    write_size=write(fd,dummy_data,sizeof(dummy_data));
    printf("write_size=%d\n",write_size);
    close(fd);
    
    fd=open(fname,O_RDONLY);
    read_size=read(fd,buf,MAX_BUF);
    printf("read_size=%d\n",read_size);
    write_size=write(STDOUT_FILENO,buf,read_size);
    close(fd);
}

 

위의 코드를 자세히 설명하면 다음과 같다.

fd=open(fname,O_RDWR|O_CREAT|O_EXCL,0664);

 파일 디스크립터를 지정함과 동시에 open 시스템 콜 함수를 호출하고 있다. 지정한 파일 경로인 fname을 여는 것인데, flags 옵션들이 O_RDWR(읽고쓰기), O_CREAT(새로운 파일 생성), O_EXCL(배타적으로 생성, 즉 이미 존재하는 파일이면 에러를 출력하란 뜻) 이다. 또한 마지막에 0664는 8진수 표기법이다. 664는 110 110 100 을 의미하며 각각 user 부분의 rwx, group 부분의 rwx, 그외 사용자들 부분의 rwx 에 해당한다.

 만약, 이미 존재하는 파일이라면 뒷 부분에 내용을 추가하는 방식으로 파일을 생성하고 싶다면, O_APPEND 옵션을 추가하면 된다.

 

>> 권한설정 및 8진수표기법 자세히 알아보기

https://jinn-o.tistory.com/121?category=971524 

 

[리눅스 프로그래밍] 리눅스의 다중 사용자 시스템, 권한 설정

다중 사용자 시스템 Multi-User system ?  우리가 리눅스를 사용할 때 가장 먼저 하는 일은 로그인(login)이다. 이 과정을 통해 사용자의 홈 디렉토리에서 셸(Bash 등)이 기동되어 허가된 파일을 읽고 쓰

jinn-o.tistory.com

 

만든 create 함수 실행시켜보기

두번째 실행했을 때 오류가 나는 이유는 파일을 open 할 때 배타적으로 생성했기 때문이다.

+ Recent posts