헤더 : fcntl.h
open은 두 가지 형태의 시스템 콜을 가지고 있다. 형태는 아래와 같다. 참고로 rush 및 bsq에서는 첫 번째 시스템 콜을 이용할 것이다.
int open(const char *pathname, int flags);
int open(const char *pathname, int flag, mode_t mode);
파일의 경로와 이름으로, 절대경로의 파일명과 상대경로의 파일명 모두 허용된다.
rush와 bsq에서는 간단하게 파일명으로 지정하고 읽고자 하는 파일을 Makefile과 같은 경로에 두면 된다.
파일을 어떻게 열지를 결정하는 플래그로서, 읽기 전용으로 열 때는 O_RDONLY, 쓰기 전용으로 열 때는 O_WRONLY, 읽기 쓰기로 열고 싶을 때는 O_RDWR을 사용한다.
rush와 bsq에서는 원본을 훼손해서는 안되므로 플래그를 O_RDONLY로 설정한다.
성공적으로 파일을 열게 되면 파일 디스크립터를 반환한다. 그렇지 않으면 음수를 반환한다.
open이 제대로 되었는지 확인하기 위해서는 int형 변수를 하나 선언해준 후, open의 결과값을 할당하여 해당 결과값이 0 미만인지 확인하면 된다.
| 정수값 0 | stdin | /dev/stdin |
|---|---|---|
| 정수값 1 | stdout | /dev/stdout |
| 정수값 2 | stderr |
#include <fcntl.h>
#define SUCCESS 1
#define FAILURE -1
intmain(void)
{
int fd; // 리턴값을 저장
fd = open("hello.txt", O_RDONLY);
/*
제대로 open이 되었다면, fd에는 파일디스크립터 중 표준 입력에 해당하는 0값이 저장.
제대로 open되지 않았다면, fd에는 음수가 담김.
*/
if (fd < 0)
return (FAILURE);
else
return (SUCCESS);
}