03
2016-Mar
[리눅스] 파일관리 라이브러리 함수
작성자: Blonix
IP ADRESS: *.148.87.98 조회 수: 1649
참고자료 1 :: http://blog.naver.com/PostView.nhn?blogId=skout123&logNo=50133105128
참고자료 2 :: http://hyunkie.tistory.com/45
#include <unistd.h>
성공시 0, 실패시 EOF 리턴
int mkdir(const char *pathname, mod_t mode) // mod_t는 접근권한(읽기/쓰기/읽기쓰기) 8진수로 (0754, 0777 이런식)
int rmdir(const char *pathname) // 디렉토리 내부가 비어있을때만 삭제 가능
int remove(const char *path) // 파일삭제
int rename(const char *oldname, const char *newname) // 이름 혹은 경로변경
int chdir(const char *path) // 현재 작업디렉토리 변경
int fchdir(int fp) // 파일 포인터의 위치로 현재 작업디렉토리 변경
char* getcwd(char *buf, size_t size) // buf 에 현재 작업 디렉토리 저장. size는 예상 디렉토리 길이. 대충 200 넣으면 됨.
// 디렉토리 길이가 예상보다 길 경우 NULL 포인터 반환
#include <sys/types.h>
#include <dirent.h>
DIR* opendir(const char *path) // 디렉토리를 연다. (FILE fp; fp = fopen() 에서 fopen과 유사)
DIR* closedir(DIR* dir) // 디렉토리를 닫는다. (fclose와 유사. 꼭 호출해줘야 메모리 누수를 막을 수 있다)
//DIR 구조체는 다음과 같다.
typedef struct{
int d_fd; // FD (파일 디렉토리 포인터? FP와 유사)
int d_loc; // 블록 오프셋
int d_size; // 데이터의 크기
int d_*d_buf; // 디렉토리 블록
}
struct dirent* readdir(DIR* dir) // opendir로 연 디렉토리를 읽고 dirrent 구초체 포인터에 리턴
// dirent 구초체는 다음과 같다.
typedef struct{
int d_ino; // inode 번호
off_t d_off; // 디렉토리 내 오프셋
unsigned int d_reclen; // 항목의 레코드 길이
char d_name[NAME_MAX+1]; // 파일 이름
}
// 이 함수는 호출할때마다 파일 하나씩 순서대로 읽어내므로 다음과 같이 사용 가능하다.
DIR* dp;
struct dirent* dirp;
~~~ dir 오픈 작업
while ( dirp = readdir(dp) ) // 이렇게 하면 dp 디렉토리 안의 모든 파일에 대해 반복문이 돈다.
~~~ dir 클로즈 작업
void rewinddir(DIR* dir) // 디렉토리 위치 식별자를 처음으로 되돌린다.
// 그리고 마지막으로 윈도에서 사용하는 fcntl.h 를 리눅스에서도 인클루드 해 사용할 수 있다.