/*************************************** ********************************** > File name: file_stat.c > Author: Simba > Mail: dameng34@163.com > Created time: sat 23 Feb 2013 02:34:02 pm CST **************************************** ********************************/ # Include <sys/types. h> # Include <sys/STAT. h> # Include <unistd. h> # Include <fcntl. h> # Include <stdio. h> # Include <stdlib. h> # Include <errno. h> # Include <string. h># Define err_exit (m )\ Do {\ Perror (m );\ Exit (exit_failure );\ } While (0) # Define major (A) (INT) (unsigned short) A> 8) // high 8-bit, master device number # Define minor (a) (INT) (unsigned short) A & 0xff) Int filetype (struct stat * BUF) { Int flag = 0; Printf ("filetype :"); Mode_t mode; Mode = Buf-> st_mode; Switch (Mode & s_ifmt) { Case s_ifsock: Printf ("socket \ n "); Break; Case s_iflnk: Printf ("Symbolic Link \ n "); Break; Case s_ifreg: Printf ("regular file \ n "); Break; Case s_ifblk: Printf ("Block device \ n "); Flag = 1; Break; Case s_ifdir: Printf ("directory \ n "); Break; Case s_ifchr: Printf ("character device \ n "); Flag = 1; Break; Case s_ififo: Printf ("FIFO \ n "); Break; Default: Printf ("unknown file type \ n "); Break; } Return flag; } Void fileperm (struct stat * Buf, char perm []) { Strcpy (perm ,"----------"); Perm [0] = '? '; Mode_t mode; Mode = Buf-> st_mode; Switch (Mode & s_ifmt) { Case s_ifsock: Perm [0] ='s '; Break; Case s_iflnk: Perm [0] = 'l '; Break; Case s_ifreg: Perm [0] = '-'; Break; Case s_ifblk: Perm [0] = 'B '; Break; Case s_ifdir: Perm [0] = 'D '; Break; Case s_ifchr: Perm [0] = 'C '; Break; Case s_ififo: Perm [0] = 'P '; Break; } If (Mode & s_irusr) Perm [1] = 'R '; If (Mode & s_iwusr) Perm [2] = 'W '; If (Mode & s_ixusr) Perm [3] = 'X '; If (Mode & s_irgrp) Perm [4] = 'R '; If (Mode & s_iwgrp) Perm [5] = 'W '; If (Mode & s_ixgrp) Perm [6] = 'X '; If (Mode & s_iroth) Perm [7] = 'R '; If (Mode & s_iwoth) Perm [8] = 'W '; If (Mode & s_ixoth) Perm [9] = 'X '; Perm [10] = '\ 0 '; } Int main (INT argc, char * argv []) { If (argc! = 2) { Fprintf (stderr, "usage % s file \ n", argv [0]); Exit (exit_failure ); } Printf ("filename: % s \ n", argv [1]); Struct stat sbuf; If (lstat (argv [1], & sbuf) =-1) Err_exit ("stat error "); Printf ("file in Dev number: Major % d, minor % d \ n ", Major (sbuf. st_dev), minor (sbuf. st_dev )); Printf ("file inode: % d \ n", (INT) sbuf. st_ino ); If (filetype (& sbuf )) { Printf ("device number: Major % d, minor % d \ n ", Major (sbuf. st_rdev), minor (sbuf. st_rdev )); } Char perm [11] = {0 }; Fileperm (& sbuf, Perm ); Printf ("File Permission bits = % o % s \ n", sbuf. st_mode & 07777, Perm ); Return 0; } |