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

//메모리에 있는 데이터들 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);