sliver__

[Manage Files] - mv / rename 함수 본문

CS/UNIX

[Manage Files] - mv / rename 함수

sliver__ 2022. 10. 18. 23:26
728x90

[Moving Files]

  • mv(1) 명령은 파일을 이동하기 위해 link(2) 및 unlink(2) 호출을 사용한다.
  • 그러나 파일이 다른 파일 시스템으로 이동되면 mv(1) 명령이 파일을 복사해야 한다.
  • 파일이 동일한 파일 시스템 내에서 이동되고 있다고 가정하면 예제 명령은 다음과 같다.
 mv ./a.out ./bin/my_app
  • C 코드로 작성하면 아래와 같다.
if ( link("./a.out","./bin/my_app") == -1 ) {
    fprintf(stderr,"%s: link(2)\n",strerror(errno));
    abort();
}
if ( unlink("./a.out") == -1 ) {
    fprintf(stderr,"%s: unlink(2)\n",strerror(errno));
    abort();
}
  • 파일 이동의 기본 개념은 새 링크를 만든 다음 이전 링크를 제거하는 것이다.
  • 이렇게 하면 파일을 한 경로에서 다른 경로로 이동하는 것처럼 보인다.
  • 그러나 소스 및 대상 경로 이름이 다른 파일 시스템에 있는 경우 EXDEV 오류가 발생한다.
  • EXDEV : 두 경로의 파일이 동일한 파일 시스템에 없을 경우 발생하는 에러이다.
  • rename(2) 함수는 한 가지 오류만 테스트하면 되므로 코딩 작업이 줄어든다.
#include <stdio.h>

int rename(const char *from, const char *to);
  • rename 함수는 성공하면 0 실패하면 -1을 반환하고 errno에 이유가 적힌다.
  • to의 대상이 symbolic link일 경우 symbolic link의 이름이 변경된다.
  • rename 함수는 경로 이름이 있는 경우 link를 해제한다.

 

728x90

'CS > UNIX' 카테고리의 다른 글

[Manage Files] - access 함수  (1) 2022.10.19
[Manage Files] - stat / fstat 함수  (1) 2022.10.19
[Manage Files] - link 함수  (0) 2022.10.18
[Manage Files] - unlink / remove 함수  (1) 2022.10.18
[File locking] - Record Locking  (0) 2022.10.17
Comments