Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • DB
  • SIGINT
  • OperatingSystem
  • Spring
  • C++
  • 1259
  • C
  • 백준
  • signal
  • 우아한테크코스5기
  • 우아한테크코스
  • 우테코
  • 인덱스
  • BOJ
  • 운영체제
  • 트랜잭션
  • Operating System
  • 우아한형제들
  • 데이터 조작어
  • OS
  • 우테코5기
  • 리눅스
  • bean
  • 자바
  • 블랙잭
  • 원시값 포장
  • 우테코 체스
  • 정규화
  • Linux
  • 프로세스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX  chmod(2) fchmod(2)
C & LINUX

C / LINUX chmod(2) fchmod(2)

2022. 5. 2. 15:08

함수 기능

파일의 접근 권한을 변경하는 함수

함수 원형

#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *filepath, mode_t mode);
int fchmod(int fd, mode_t mode);

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

함수 파라메터

filepath

파일의 경로이름

mode

umask의 cmask와 동일

함수 예제

chmod1

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

int main(void){
    struct stat statbuf;
    char *fname1 = "ssu_file1";
    char *fname2 = "ssu_file2";

    if(stat(fname1,&statbuf)<0){
        fprintf(stderr,"stat error %s\n",fname1);
    }
    if(chmod(fname1,(statbuf.st_mode & ~S_IXGRP) | S_ISUID)<0)
        fprintf(stderr,"chmod error %s\n",fname1);

    if(chmod(fname2,S_IRUSR |S_IWUSR|S_IRGRP|S_IROTH|S_IXOTH)<0)
        fprintf(stderr,"chmod error %s\n",fname2);

    exit(0);
}

chmod2

#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);
}

함수 결과

 

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

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

'C & LINUX' 카테고리의 다른 글

C / LINUX link() unlink()  (0) 2022.05.02
C / LINUX chown() fchown() lchown()  (0) 2022.05.02
C / LINUX umask()  (0) 2022.05.02
C / LINUX access()  (0) 2022.05.02
C / LINUX atexit(3)  (0) 2022.05.02
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX link() unlink()
    • C / LINUX chown() fchown() lchown()
    • C / LINUX umask()
    • C / LINUX access()
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바