CS2257 Lab

Exp# 1d stat

Aim To display file status using stat system call.

Algorithm

1. Get as command line argument. 2. If filename does not exist then stop. 3. Call stat system call on the filename that returns a structure 4. Display members st_uid, st_gid, st_blksize, st_block, st_size, st_nlink, etc., 5. Convert time members such as st_atime, st_mtime into time using ctime function 6. Compare st_mode with mode constants such as S_IRUSR, S_IWGRP, S_IXOTH and display file permissions. 7. Stop

Result Thus attributes of a file is displayed using stat system call.

http://cseannauniv.blogspot.com Vijai Anand CS2257 Operating System Lab

Program /* File status - stat.c */ #include #include #include #include int main(int argc, char*argv[]) { struct stat file; int n; if (argc != 2) { printf("Usage: ./a.out \n"); exit(-1); } if ((n = stat(argv[1], &file)) == -1) { perror(argv[1]); exit(-1); }

printf("User id : %d\n", file.st_uid); printf("Group id : %d\n", file.st_gid); printf("Block size : %d\n", file.st_blksize); printf("Blocks allocated : %d\n", file.st_blocks); printf(" no. : %d\n", file.st_ino); printf("Last accessed : %s", ctime(&(file.st_atime))); printf("Last modified : %s", ctime(&(file.st_mtime))); printf(" : %d bytes\n", file.st_size); printf("No. of links : %d\n", file.st_nlink);

printf("Permissions : "); printf( (S_ISDIR(file.st_mode)) ? "d" : "-"); printf( (file.st_mode & S_IRUSR) ? "r" : "-"); printf( (file.st_mode & S_IWUSR) ? "w" : "-"); printf( (file.st_mode & S_IXUSR) ? "x" : "-"); printf( (file.st_mode & S_IRGRP) ? "r" : "-"); printf( (file.st_mode & S_IWGRP) ? "w" : "-"); printf( (file.st_mode & S_IXGRP) ? "x" : "-"); printf( (file.st_mode & S_IROTH) ? "r" : "-"); printf( (file.st_mode & S_IWOTH) ? "w" : "-"); printf( (file.st_mode & S_IXOTH) ? "x" : "-"); printf("\n");

if(file.st_mode & S_IFREG) printf("File type : Regular\n"); if(file.st_mode & S_IFDIR) printf("File type : Directory\n"); } http://cseannauniv.blogspot.com Vijai Anand CS2257 Operating System Lab

Output

$ gcc stat.c

$ ./a.out fork.c User id : 0 Group id : 0 Block size : 4096 Blocks allocated : 8 Inode no. : 16627 Last accessed : Fri Feb 22 21:57:09 2013 Last modified : Fri Feb 22 21:56:13 2013 File size : 591 bytes No. of links : 1 Permissions : -rw-r--r-- File type : Regular

http://cseannauniv.blogspot.com Vijai Anand