open

헤더 : fcntl.h

open은 두 가지 형태의 시스템 콜을 가지고 있다. 형태는 아래와 같다. 참고로 rush 및 bsq에서는 첫 번째 시스템 콜을 이용할 것이다.

int open(const char *pathname, int flags);

int open(const char *pathname, int flag, mode_t mode);

pathname

파일의 경로와 이름으로, 절대경로의 파일명과 상대경로의 파일명 모두 허용된다.

rush와 bsq에서는 간단하게 파일명으로 지정하고 읽고자 하는 파일을 Makefile과 같은 경로에 두면 된다.

flags

파일을 어떻게 열지를 결정하는 플래그로서, 읽기 전용으로 열 때는 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);
}