Role of Operating system: 하드웨어 자원 관리, 프로그램 자원 관리
Kernel : 운영체제의 다른 부분 및 운영체제 프로그램 수행에 필요한 서비스를 제공하는 부분
Kernel의 권한과 사용자가 사용하는 프로그램의 권한이 다를 수 있다. 이 경우 사용하는 것을 커널 수준의 서비스라고 한다.
함수 | 의미 |
---|---|
open | 이미 존재하는 파일을 읽기 또는 쓰기용으로 열거나, 새로운 파일을 생성하여 연다 |
creat | 새로운 파일을 생성하여 연다 |
close | open 또는 creat로 열려진 파일을 닫는다 |
read | 열려진 파일로부터 데이터를 읽어 들인다 |
write | 열려진 파일에 데이터를 쓴다 |
lseek | 파일 안에서 읽기/쓰기 포인터를 지정한 바이트 위치로 이동한다 |
unlink/remove | 파일을 삭제한다 |
cat>file_name ex): $ cat>data.txt
Hello my world!!
(Save:ctrl+d)
시스템으로부터 할당받은 파일을 대표하는 어떤 값으로 파일 열기가 성공하면 음수가 아닌 어떤 정수값; 파일 열기 실패시 -1
$ pwd
$ rmdir dir_name
int open(const char *pathname, int flags, [mode_t mode]);
pathname: 개방할 파일의 경로 이름을 가지고 있는 문자열의 포인터(절대경로, 상대경로)
flags: 파일의 개방 방식을 지정한다
mode: 대부분의 경우 생략할 수 있는 값으로 새롭게 생성하는 파일의 초기 접근 권한을 지정
Return: 정상적으로 파일 개방시 파일 기술자를 반환; 파일 개방이 실패할 경우 -1을 반환
flags
flag | 의미 |
---|---|
O_RDONLY | 읽기만 가능한 상태로 접근 |
O_WRONLY | 쓰기만 가능한 상태로 접근 |
O_RDWR | 읽기, 쓰기 모두 가능한 상태로 접근 |
Return
파일 기술자: 프로그램 내에서 파일 기술자는 중복되지 않는다
Return | 의미 |
---|---|
0 | 표준 입력 |
1 | 표준 출력 |
2 | 표준 에러 |
기본적으로 할당되어 있는 파일 기술자들로 파일 개방시 3부터 시작한다
시스템 호출이 실패했을 겨우를 고려한 프로그램 코드
filedes = open("data.txt", O_RDONLY);
/* filedes가 -1이면 open 호출이 실패했다. */
if(filedes == -1)
{printf("file open error!\n"); exit(1); }
int close(int filedes);
filedes: 이전에 open이나 creat에 의해 개방된 파일의 파일 기술자이다.
Return: 작업이 성공할 경우 0이 반환되며, 실패할 경우 -1이 반환된다.
/* 파일을 읽기 전용 상태로 개방한다. */
filedes = open("data.txt", O_RDONLY);
…
/* data.txt를 사용하는 코드가 위치 */
…
close(filedes);
개방된 파일은 사용이 끝난 후 반드시 닫아준다
int creat(const char *pathname, mode_t mode);
pathname: 개방할 파일의 경로 이름을 가지고 있는 문자열의 포인터(절대경로, 상대경로)
mode: 새롭게 생성하는 파일의 초기 접근 권한을 지정한다. creat는 존재하지 않는 파일을 새롭게 생성하는 것이 사용 목적이기 때문에 생략할 수 없다.
Return: 정상적으로 파일 개방시 파일 기술자를 반환; 파일 개방이 실패할 경우 -1을 반환
이미 존재하는 파일을 지정하여 creat를 사용하는 경우
ssize_t write(int filedes, const void *buf, size_t count);
filedes: 읽기/쓰기 작업을 수행할 파일에 대한 기술자이다
buf: 파일로 쓰려고 하는 내용이 저장되어 있는 공간이다. 일반적으로 배열을 사용하게 되면 배열의 데이터 형식은 어느 것이라도 상관없다
count: buf에 있는 데이터 중에 실제로 파일로 저장할 데이터의 크기이다
Return: 파일로 쓰기가 성공한 데이터의 크기이다
대부분의 경우 count에서 지정한 값과 동일한 값이 반환된다
만약 count의 값과 반환값이 다르다면 쓰기 작업이 실패한 것이다
off_t lseek(int filedes, off_t offset, int whence);
filedes: 읽기/쓰기 포인터를 변경할 파일을 지정한다
offset: 새롭게 지정할 읽기/쓰기 포인터의 위치를 의미한다(offset이라 기준에 따라 음수도 가능)
whence: offset의 기준이 된다; 파일의 맨 처음(SEEK_SET); 현재 포인터의 위치(SEEK_CUR); 파일의 맨 마지막(SEEK_END)
Return: 작업이 성공하면 파일의 첫 부분을 기준으로 한 포인터의 오프셋을 반환한다. 작업이 실패할 경우 (off_t)-1이 반환
int unlink(const char *pathname);
int remove(const char *pathname);
pathname: 삭제할 파일의 경로 이름이다
Return: 성공시 0, 실패시 -1 반환