1 / 10

시스템 프로그래밍 응용 - 예제 3-4,5-

시스템 프로그래밍 응용 - 예제 3-4,5-. 컴퓨터정보학부 2002242026 김용식. Stat,Fstat 란 ?? 파일의 상태를 질의할수 있으며 , 파일 유형 , 소유자 , 접근허가 , 크기 , 링크수 Inode 번호 , 파일 접근시간 정보 반환. Stat 호출 함수 사용법. #include <sys/types.h> #include <sys/stat.h> Int stat(const char *path, struct stat *buf);

hope-walker
Download Presentation

시스템 프로그래밍 응용 - 예제 3-4,5-

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 시스템 프로그래밍 응용-예제 3-4,5- 컴퓨터정보학부 2002242026 김용식

  2. Stat,Fstat란?? • 파일의 상태를 질의할수 있으며, • 파일 유형,소유자,접근허가,크기,링크수 • Inode번호,파일 접근시간 정보 반환

  3. Stat호출 함수 사용법 • #include <sys/types.h> • #include <sys/stat.h> • Int stat(const char *path, struct stat *buf); • Int fstat(int fildes,struct stat *buf);

  4. Buf란 stat구조체의 포인터. • 파일에 대한 정보를 구조체로 가져옴. buf Stat구조체 파일 정보 반환값:정상 종료시 ‘0’그렇지 않을때에는 ‘-1’반환

  5. Stat.h에 포함되는 기능. St_mode; 파일의 모드 St_ino; Inode 번호 St_dev; 디바이스가 포함한id St_rdev; 디바이스id,문자 특수 파일이나 블록 특수파일을 위해 정의 St_nlink; 링크의 수 St_uid; 파일 소유자의 사용자id St_gid; 파일 소유자의 그룹id St_size; 파일의 크기 St_atime; 마지막으로 엑세스한 시간 St_mtime; 마지막으로 데이터를 수정한 시간 St_ctime; 마지막으로 status를 변경한 시간 St_blksize; I/O블록의 크기 St_blocks; 디스크에 배당된 물리적 블록의 크기

  6. #include <sys/types.h> • #include <sys/stat.h> • main(argc,argv) • int argc; • char *argv[]; • { • struct stat stbuf; /*stat형의 구조체 선언*/ • Int stat(); • if(stat(argv[1],&stbuf) == -1) { /*비정상 반환시’-1’반환*/ • perror(argv[1]); • exit(1); • } • printf("file name: %s\t\t",argv[1]); printf("device: %d\t",stbuf.st_dev); /*장치번호*/ • printf("i-number: %u\n",stbuf.st_ino); /*inode번호*/ • prntmode(&stbuf); /*파일의모드 출력프로그램*/ • printf("links: %d\t",stbuf.st_nlink); /*링크의 수*/ • printf("file size: %ld\n",stbuf.st_size); /*파일의 크기 출력*/ • prntuser(&stbuf); • prntimes(&stbuf); • exit(0); • }

  7. prntmode(stbuf) struct stat *stbuf; { switch(stbuf->st_mode & S_IFMT) { case S_IFDIR: /*정규 파일*/ printf("directory\t"); break; case S_IFCHR: /*문자특수파일*/ printf("character special file\t"); printf("special device: %d\t",stbuf->st_rdev); break; case S_IFBLK: /*블럭특수파일*/ printf("block special file\t"); printf("special device: %d\t",stbuf->st_rdev); break; case S_IFREG: /*정규파일*/ printf("regular file\t"); break; case S_IFIFO: /*FIFO파일*/ printf("named pipe\t"); break; } if(stbuf->st_mode & S_ISUID) printf("setuid\t"); if(stbuf->st_mode & S_ISGID) printf("setgid\t"); if(stbuf->st_mode & S_ISVTX) printf("sticky\t"); printf("permissions: %o\n",stbuf->st_mode & 0777); }

  8. #include <pwd.h> #include <grp.h> prntuser(stbuf) struct stat *stbuf; { struct passwd *pw, *getpwuid(); /*password와 group 구조체선언*/ struct group *grp,*getgrgid(); pw = getpwuid(stbuf->st_uid); /*파일소유자의 사용자id*/ printf("user ID: %d name: %s\t",stbuf->st_uid,pw->pw_name); grp = getgrgid(stbuf->st_gid); /*파일소유자의 그룹id*/ printf("group ID: %d group: %s\n",stbuf->st_gid,grp->gr_name); } #include <time.h> prntimes(stbuf) struct stat *stbuf; { char *ctime(); printf("last access: \t\t%s", ctime(&stbuf->st_atime)); printf("last modification: \t%s", ctime(&stbuf->st_mtime)); printf("last status change: \t%s", ctime(&stbuf->st_ctime)); }

  9. -결과- • $ex3-4-5 ex3-4-5 • File name:ex3-4-5 device:8388615 i-number:4032 • Regular file permissions:755 • Links:1 file size:7548 • User ID:300 name:bake group Id:310 group:prof • Last access: Thu Jan 20 14:02:26 1994 • Last modification: Thu Jan 20 14:02:02 1994 • Last status change Thu Jan 20 14:02:02 1994 • $ex3-4-5 /dev/console • File name:/dev/console device:8388608 i-number:15196 • Character special file special device:0 permissions:620 • Links:1 file size:0 • User ID:300 name:bake group Id:7 group:tty • Last access: Thu Jan 20 14:02:26 1994 • Last modification: Thu Jan 20 14:02:02 1994 • Last status change Thu Jan 20 14:02:02 1994

  10. $ex3-4-5/etc • File name:/etc device:8388608 i-number:7559 • Directory permissions:775 • Links:24 file size:3072 • User ID:0 name:root group ID:3 group:sys • Last access: Thu Jan 20 14:02:26 1994 • Last modification: Thu Jan 20 14:02:02 1994 • Last status change Thu Jan 20 14:02:02 1994 • $

More Related