함수 기능
파일의 접근 권한을 변경하는 함수
함수 원형
#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 |