시작에 앞서서 파일 디스크립터에 대해 알아야 할 필요가 있습니다.
파일 디스크립터
유닉스 시스템에서 사용되는 개념입니다. 프로세스가 파일들을 접근할 때에 번호가 필요한데 이를 파일 디스크립터라 부릅니다.
기본적으로 할당되는 파일 디스크립터가 총 3가지 있습니다.
0 : 표준 입력(Standard Input)
1 : 표준 출력(Standard Output)
2 : 표준 에러(Standard Error)
open함수는 파일 디스크립터를 만드는 함수라고 생각하면 좋을 것 같습니다.
open
#include <fcntl.h>
int open(const char *FILENAME, int FLAGS, mode_t MODE);
FILENAME은 접근하고자 하는 파일 이름입니다.
FLAGS는 어떠한 목적으로 접근할지를 선택하게 해 줍니다.
MODE는 특정 경우에만 해당이 되어 아래에서 살펴보도록 하겠습니다.
마지막으로 반환값입니다. 성공 시 파일디스크립터를 반환해 주고 실패 시 -1을 반환합니다.
파일을 열 때에 어떠한 목적이 있을까요??
읽기, 쓰기, 혹은 둘 다,... 다양한 목적이 있을 것입니다. 그것을 저희는 FLAGS의 인자값으로 넣어야 합니다.
FLAGS
O_RDONLY : 읽기 목적으로 열기
O_WRONLY : 쓰기 목적으로 열기
O_RDWR : 읽기와 쓰기가 모두 가능한 목적으로 열기
O_CREAT : FILENAME이 존재하지 않으면 생성(MODE도 설정해야 함)
O_EXCL : O_CREAT로 생성된 FILENAME이 아니면 생성하지 않음
O_TRUNC : 기존의 FILENAME 내용을 모두 삭제
O_APPEND : FILENAME에 적힌 내용 후부터 쓰기
이것 외에도 O_NOCITTY, O_NONBLOCK, O_SYNC 등 다양한 옵션이 있습니다. 나중에 궁금하시면 찾아보셔도 좋을 것 같습니다.
O_CREAT시 MODE 인자값을 입력해야 합니다. 생성된 파일의 권한을 설정해 주어야 하기 때문입니다.
파일의 권한에 대한 설정을 아직은 잘 모르시는 분들은 아래의 링크를 참고해 주시길 바라겠습니다.
https://hig0617.tistory.com/34
chmod사용법, 리눅스 파일 권한 수정하기
파일 권한을 수정하기 위해서는 파일 권한을 보는 방법 먼저 알아야 합니다. $ ls -l 리눅스에서 파일 또는 디렉터리에 지정된 권한을 확인해 주는 명령어입니다. 참고로 여기서 숨긴 항목까지 보
hig0617.tistory.com
간단한 예를 들어보도록 하겠습니다.
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
int fd;
fd = open("./newfile", O_CREAT | O_TRUNC | O_WRONLY, 0777);
if (fd < 0)
return (0);
write(fd, "Hello, world!\n", 14);
return (0);
}
위와 같은 코드를 실행되면 "Hello, world!\n"가 newfile에 적히게 됩니다.
'Language > C언어' 카테고리의 다른 글
C056_C언어에 환경 변수 사용하기 (1) | 2024.01.14 |
---|---|
C055_pipe 함수 사용하기 (1) | 2024.01.13 |
C053_dup2 함수 사용하기 (0) | 2024.01.11 |
C052_dup 함수 사용하기 (0) | 2024.01.10 |
C051_waitpid 함수 사용하기 (1) | 2024.01.09 |