반응형
unlink(2)
#include <unistd.h>
int unlink(const char *pathname);
파일을 삭제하는 system call 함수입니다. 정확하게는 unlink는 hard link의 이름을 삭제하고 hard link가 참조하는 count를 1감소시킵니다. hard link의 참조 count가 0이 되면, 실제 파일의 내용이 저장되어 있는 disk space를 free하여
OS가 다른 파일을 위해서 사용할 수 있도록 합니다. 따라서 hard link를 생성하지 않은 파일은 바로 disk space를 해제하여 사실상 파일 삭제합니다.
그러나 open(2)으로 파일이 열려진 상태에서 unlink(2)를 호출하여 hard link 참조 count가 0이 되어도 directory entry에서 파일 이름 등의 정보는 삭제되지만 disk space는 해제되지 않습니다.
OS는 hard link 참조 count가 0이고 file open 참조 count가 0일 때에 파일의 내용이 저장된 disk space를 해제합니다.
파라미터
pathname
- 파일을 삭제할 파일명(full path 또는 상대 path)
RETURN
0
- 정상적으로 파일 또는 link가 삭제되었습니다.
-1
- 오류가 발생하였으며, 상세오류 내용은 errno에 저장됩니다.
EACCES : 그 파일이 있는 디렉토리에 쓰기 권한이 없거나 pathname을 구성하는 디렉토리 중에서 search 권한이 없는 경우입니다.
EBUSY : 파일을 사용중입니다. 그러나 일반적인 파일들은 사용중이라도 이 오류가 발생하지 않습니다.
EFAULT : pathname 포인터 변수가 가리키는 영역이 사용할 수 없는 영역입니다.
EIO : I/O 오류가 발생하였습니다.
EISDIR : pathname이 디렉토리입니다.
ELOOP : 너무 많은 symbolic link의 link입니다.
ENAMETOOLONG : pathname의 문자열의 길이가 너무 깁니다.
ENOENT : pathname을 구성하는 내용중에서 존재하지 않는 directory path이거나 dangling symbolic link이거나 pathname이 비어있습니다.
ENOMEM : kernel 메모리가 부족합니다.
ENOTDIR: pathname을 구성하는 정보중에서 directory가 아닌 것이 있습니다.
EPERM : 권한이 없습니다.
EPERM or EACCES : pathname을 구성하는 디렉토리 중에서 sticky bit가 설정되어 owner외에는 삭제할 수 없습니다.
EROFS : pathname이 가리키는 파일이 read only 파일 시스템에 있는 파일입니다.
활용 예제
Sample
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int idx;
if(argc == 1) {
fprintf(stderr, "%s {file1} [file2] ...\n", argv[0]);
return 1;
}
for(idx = 1; idx < argc; idx++) {
if(unlink(argv[idx]) == -1) {
fprintf(stderr, "%s file 삭제 error: %s\n", argv[idx], stderror(errno));
} else {
printf("%s file이 삭제되었습니다.\n", argv[idx]);
}
}
return 0;
}
see also :
반응형
'C언어 header > unistd.h' 카테고리의 다른 글
read(2) - 파일에서 데이터를 읽기 (0) | 2019.10.04 |
---|---|
usleep(3) - 설정된 micro초(microsecond: 100만분의 1초) 동안 대기 (0) | 2019.10.01 |
truncate(2) - 파일의 크기를 조정하기 (0) | 2019.10.01 |
sync(2) - 전체 kernel buffer를 동기화 하기 (0) | 2019.10.01 |
symlink(2) - 새로운 symbolic link 생성 (0) | 2019.10.01 |