C & LINUX

C / LINUX chown() fchown() lchown()

Ocean_ 2022. 5. 2. 15:15

함수 기능

파일의 소유자 id와 그룹 사용자 id를 변경하기 위한 시스템호출 함수

함수 원형

#include <unistd.h>
#include <sys/types.h>
int chown(const char *filepath, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *filepath, uid_t owner, gid_t group);

함수 파라메터

pathname

소유자를 변경할 파일의 경로

filedes

파일 디스크립터

owner

파일의 새 소유자

group

파일의 새그룹

함수 예제

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>

#define MODE_EXEC (S_IXUSR|S_IXGRP|S_IXOTH)

int main(int argc, char *argv[]){

    struct stat statbuf;
    int i;

    if(argc<2){
        fprintf(stderr, "usage: %s <file1><file2>...<fileN>\n",argv[0]);
        exit(1);
    }

    for(i=1; i<argc; i++){
        if(stat(argv[i],&statbuf)<0){
            fprintf(stderr, "%s : chmod error\n",argv[i]);
            continue;
        }

        statbuf.st_mode |= MODE_EXEC;
        statbuf.st_mode ^= (S_IXGRP|S_IXOTH);
        if(chmod(argv[i],statbuf.st_mode)<0)
            fprintf(stderr, "%s : chmod error\n",argv[i]);
        else
            printf("%s : file permission was changed.\n",argv[i]);
    }
    
    exit(0);
}

함수 결과

 

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

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