directories
struct dirent{
ino_t d_ino; //inode number. 0일 경우 사용되지 않는 비어있는 directory
char d_name[NAME_MAX + 1]; //NULL-terminated filename
}
int mkdir(const char *pathname, mode_t mode); //'.', '..' 파일은 자동으로 생성됨
int rmdir(const char *pathname); //dir내부에 파일이 있으면 지울 수 없음
DIR *opendir(const char *dirname); //dirname의 DIR포인터 반환
int closedir(DIR *dirptr); //dirptr이 가리키는 디렉토리 닫음
//dirent 읽어옴. 실패시 또는 directory 끝에 도달했을 때(dirent 모두 읽었을 때) NULL반환
struct dirent *readdir(DIR *dirptr);
void rewinddir(DIR *dirptr); //dirptr로 포인터 위치 변환
int chdir(const char *path); //directory 변경
//현재 working directory 반환. name에도 반환값 저장됨. size는 반환 값 길이 보다 길어야 함
char *getcwd(char *name, size_t size);
//nopenfd: 한번에 열 fd개수. tree의 depth 해당.
int ftw(const char *path, int(*func)(), int nopenfd);
File System
- 새로 write를 할 때 memory에만 데이터가 있고 disk에는 아직 쓰여지지 않는 경우가 발생할 수 있어서 동기화 작업 필요
//메모리에 있는 데이터들 disk에 동기화
void sync(void); //모든 파일을 동기화해서 작업시간이 오래걸리므로 background로 실행하고 바로 return
int fsync(int filedes); //특정 파일의 동기화 작업이 모두 완료되면 return
Device File
struct stat {
mode_t st_mode; /* file type & mode (permissions) */
ino_t st_ino; /* i-node number (serial number) */
dev_t st_dev; /* device number (file system) */
dev_t st_rdev; /* device number for special files. major/minor 값 구할 때 사용 */
nlink_t st_nlink; /* number of links */
...
};
//stat 정보 buf에 기록
int statvfs(const char *path, struct statvfs *buf); //파일 경로 사용
int fstatvfs(int fd, struct statvfs *buf); //fd 사용
//파일 정보 반환
long pathconf(const char *pathname, int name);
long fpathconf(int filedes, int name);