Linux/Linux_programing

리눅스 FILE - open(), close() 시스템콜

sosal 2009. 9. 28. 08:18
반응형
/*
 * made by so_sal
 * http://sosal.tistory.com/
 */

open()
1. 함수의 정의
2. 매개변수
3. 권한

close()


1. 함수의 정의

#include <fcnt1.h> //file control header

#include <sys/types.h>
#include <sys/stat.h>

int open( const char *path, int oflags );
int open( const char *path, int oflags, mode_t mode );
open 함수는 path 매개변수의 경로를 통해서 열고 파일 서술자를 리턴합니다.
파일 서술자를 이용해 파일컨트롤, read, write 등 시스템콜을 이용할 수 있습니다.

open 은 파일 또는 장치로의 접근 경로를 만듭니다..
open 함수의 리턴값,, 파일 서술자는 프로세스 독립적으로 고유함

 :: 프로세스마다 입력(0),출력(1),에러(2) 라는 파일 서술자를 기본적으로 가지는데,
 :: open, pipe, socket 함수 등을 통해 파일 서술자를 추가시킬 수 있다.
 :: dup1, dup2나 FD_DUPFD를 통해 복사도 가능하다.

2. 매개변수

//parameters
path : Filename.
oflag : Type of operations allowed.
pmode : Permission mode.

//Return Value
각 open 함수는 열려진 파일의 서술자를 리턴하는데, 그 값은 파일 또는 장치를 가리키게 됩니다.
에러시 -1 호출

oflags 상수

O_RDONLY : 읽기 전용으로 연다 // read
O_WRONLY : 쓰기 전용으로 연다 // write
O_RDWR : 일기와 쓰기 모두 가능하게 한다 // read, write
O_APPEND : 자료를 파일의 끝에서부터 기록한다 // 이어쓰기
O_TRUNC : 파일의 길이를 0 으로 만든다. 기존 내용은 폐기된다 // 새로쓰기
O_CREAT : *path를 만족하는 파일이 없다면, 그 경로로 파일을 생성

O_EXCL : O_CREATE를 사용할때 함께 쓰는데, 만들려는 파일이 이미 있다면 오류를 발생

mode 상수
S_IRUSR : 읽기 권한, 소유자
S_IWUSR : 쓰기 권한, 소유자
S_IXUSR : 실행 권한, 소유자
S_IRGRP : 읽기 권한, 그룹
S_IWGRP : 쓰기 권한, 그룹
S_IXGRP : 실행 권한, 그룹
S_IROTH : 읽기 권한, 다른 사용자들
S_IWOTH : 쓰기 권한, 소유자
S_IXOTH : 실행 권한, 소유자

S_I + (R,W,X) + (USR,GRP,OTH) 로 쉽게 외울 수 있습니다.

ex ) int a = open( "file", O_CREAT, S_IRUSR | S_IXOTH );
: 소유자가 읽을수 있고 다른 사용자들이 실행할 수 있는(그리고 그 외의 접근은 허용하지 않는) file 이라는 파일을 사용 // 없다면 생성, a는 open 되어진 파일 또는 장치를 가리키는 서술자



3. 권한
open flag " O_CREAT " 에 의해 생성된 파일은 유효 사용자 ID와 동일하게 설정된다.
그룹은 해당 파일의 부모 디렉터리의 그룹 ID와 같게 설정되거나, 파일을 생성한 프로세스의
유효 그룹ID와 동일하게 설정된다.





close :: 파일 서술자를 종료하는 함수

#include <unistd.h>
int close( int fildes );
The 'close' function closes the file associated with descriptor.

Return Value
성공시 0 반환, 실패시 -1 반환
Parameter
파일 서술자 fildes

ex)
위 open 예제에서 선언된 파일 서술자 a를 종료시..

int a = open( "file", O_CREAT, S_IRUSR | S_IXOTH );
close(a);
a를 가리키는 파일 서술자를 종료시킴

'Linux > Linux_programing' 카테고리의 다른 글

Socket - 02. Server socket  (0) 2009.10.03
리눅스 Socket - socket(), sockaddr  (0) 2009.09.28
리눅스 FILE - read() 시스템콜  (1) 2009.09.27
리눅스 FILE - Write() 시스템콜  (1) 2009.09.27
리눅스 FILE - System call.  (0) 2009.09.27