컴퓨터 공부/Advanced UNIX System Programming

[4월 28일 3교시] 파일 및 디렉터리 관련 시스템 콜

려리군 2009. 4. 28. 12:05

link

#include<unistd.h>

int link(const char *existingpath, const char *newpath);

기능 

존재하는 파일에 대해 새로운 디렉터리 항목 생성.

i-node에 대한 연결 계수(link count) 1증가.

슈퍼 유저만이 디렉터리에 대한 링크 설정 가능.

서로 다른 파일 시스템 간 링크를 허용하지 않음.

리턴 : 성공시 0, 실패시 -1


unlink

#include<unistd.h>

int unlink(const char *pathname);

기능 : 파일의 연결 계수 1 감소. 디렉터리에 사용 불가.

리턴 : 성공시 0, 실패시 -1


remove

#include<unistd.h>

int remove(const char *pathname);

기능 : 파일의 연결 계수 1 감소. 디렉터리면 rmdir의 효과 발생

리턴 : 성공시 0, 실패시 -1


rename

#include<unistd.h>

int rename(const char* oldname, const char *newname);

기능 : 파일이나 디렉터리 이름을 바꾼다. newname이 존재시 덮어쓴다.

리턴 : 성공시 0, 실패시 -1


symbolic link 

파일에 대한 간접적인 포인터.


symlink

#include<unistd.h>

int symlink(const char *actualpath, const char *sympath);

기능 : 심볼릭 링크를 만든다. sympath->actualpath

리턴 : 성공시 0, 실패시 -1


readlink

#include<unistd.h>

int readlink(const char *pathname, char *buf, int bufsize);

기능 : 심볼릭 링크 파일을 읽는 함수. open, close없이 바로 buf로 읽는다.

리턴 : 성공시 0, 실패시 -1


utime

#include<unistd.h>

int utime(const char *pathname, const struct utimbuf *times);

기능 : 파일의 최종 접근 시간과 최종 변경 시간을 조정.

utimbuf 구조체 내용에는 time_t형으로 접근 시간과 수정 시간 값이 존재.

리턴 : 성공시 0, 실패시 -1

※ shell에서 touch 명령으로 현재 시간으로 수정 시간을 변경 가능함.


디렉터리 구조

direct 구조체 : inode 번호와 파일이름으로 구성.

DIR 구조체 : file descriptor처럼 디렉터리를 접근하는 데 필요한 구조체


디렉터리 관련 함수들

mkdir : 디렉터리 생성

rmdir : 디렉터리 삭제

opendir : 디렉터리 항목을 읽기 위해 디렉터리 파일 open(읽기권한 필요)

readdir : 디렉터리 항목을 읽음. sizeof(struct direct)만큼 offset 바이트 수 증가.

rewinddir : 디렉터리 offset을 시작위치로.

closedir : 디렉터리 파일 close

chdir, fchdir(filedes) : 현재 작업 디렉터리 변경

getcwd : 현재 작업 디렉터리를 문자열로 얻음.