#include<sys/types.h> #include<sys/stat.h> #include<unistd.h> intstat(const char*path,structstat *buf); intfstat(intfd,structstat *buf); intlstat(const char*path,structstat *buf); 這三個(gè)函數(shù)的區(qū)別是: stat用于獲取有參數(shù)file_name指定的文件名的狀態(tài)信息,保存在參數(shù)structstat *buf中。fstat于stat的區(qū)別在于fstat是通過(guò)文件描述符來(lái)指定文件,也就是通過(guò)open函數(shù)所返回獲得的fd。lstat與stat 的區(qū)別在于,對(duì)于符號(hào)鏈接文件,lstat返回的是符號(hào)鏈接文件本身的狀態(tài)信息,而stat返回的是符號(hào)鏈接指向的文件狀態(tài)信息。 參數(shù) structstat *buf是一個(gè)保存文件狀態(tài)信息的結(jié)構(gòu)體 文件對(duì)應(yīng)的屬性 接下來(lái)只用調(diào)用這個(gè)函數(shù)來(lái)獲得文件的屬性,代碼如下: #include<stdio.h> #include<time.h> #include<sys/stat.h> #include<unistd.h> #include<sys/types.h> #include<errno.h> intmain(intargc,char*argv[]) { structstat buf; //檢查參數(shù) if(argc != 2) { printf("Usage: my_stat <filename>\n"); exit(0); } //獲取文件屬性 if( stat(argv[1], &buf) == -1 ) { perror("stat:"); exit(1); } //打印出文件屬性 printf("device is: %d\n", buf.st_dev); printf("inode is: %d\n", buf.st_ino); printf("mode is: %o\n", buf.st_mode); printf("number of hard links is: %d\n", buf.st_nlink); printf("user ID of owner is: %d\n", buf.st_uid); printf("group ID of owner is: %d\n", buf.st_gid); printf("device type (if inode device) is: %d\n", buf.st_rdev); printf("total size, in bytes is: %d\n", buf.st_size); printf(" blocksize for filesystem I/O is: %d\n", buf.st_blksize); printf("number of blocks allocated is: %d\n", buf.st_blocks); printf("time of last access is: %s", ctime(&buf.st_atime)); printf("time of last modification is: %s", ctime(&buf.st_mtime)); printf("time of last change is: %s", ctime(&buf.st_ctime)); return0; } |
|