C & LINUX

C / LINUX remove(3) rename(2)

Ocean_ 2022. 5. 2. 19:03

함수 기능

remove

파일이나 디렉토리를 unlink하는 시스템 호출, root권한 없는 unlink

rename

파일 이름을 변경 할 때 호출하는 시스템 호출

함수 원형

#include <stdio.h>

int remove(const char *filepath);
int rename(const char *oldname const char *newname);

리턴 값 : 성공시 0 에러 시 -1

함수 파라메터

filepath

파일의 경로

oldname

바뀌기전 구 이름

newname

바꿀 새로운 이름

함수 예제

remove

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc, char *argv[]){
    if(argc !=3){
        fprintf(stderr,"usage : %s<oldname><newname>\n",argv[0]);
        exit(1);
    }

    if(link(argv[1],argv[2])<0){
        fprintf(stderr,"link error\n");
        exit(1);

    }
    else   
        printf("step1 passed.\n");

    if(remove(argv[1])<0){
        fprintf(stderr, "remove error\n");
        remove(argv[2]);
        exit(1);
    }
    else
        printf("ste2 passed.\n");

    printf("Success!\n");
    exit(0);
}

rename

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>

int main(int argc, char *argv[]){
    int fd;
    if(argc !=3){
        fprintf(stderr,"usage : %s<oldname><newname>\n",argv[0]);
        exit(1);
    }

    if((fd=open(argv[1],O_RDONLY))<0){
        fprintf(stderr, "first open error for %s\n",argv[1]);
        exit(1);
    }
    else
        close(fd);

    if(rename(argv[1],argv[2])<0){
        fprintf(stderr,"rename error\n");
        exit(1);
    }

    if((fd=open(argv[1],O_RDONLY))<0){
        printf("second open error for%s\n",argv[1]);
    }
    else{
        fprintf(stderr,"it's very strange!\n");
        exit(1);
    }

    if((fd=open(argv[2],O_RDONLY))<0){
        fprintf(stderr,"third open error for%s\n",argv[2]);
        exit(1);
    }

    printf("Everything is good!\n");

}

함수 결과

remove

rename

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.