/* This program can tell you the type of the files given . struct stat include the information of the file. *****************struct stat************************ struct stat { dev_t st_dev; ID of device containing file ino_t st_ino; inode number mode_t st_mode; protection nlink_t st_nlink; number of hard links uid_t st_uid; user ID of owner gid_t st_gid; group ID of owner dev_t st_rdev; device ID (if special file) off_t st_size; total size, in bytes blksize_t st_blksize; blocksize for filesystem I/O blkcnt_t st_blocks; number of blocks allocated time_t st_atime; time of last access time_t st_mtime; time of last modification time_t st_ctime; time of last status change }; ****************************************************** we use some macros to test the type of the file *****************************macros******************* S_ISREG(m) is it a regular file? S_ISDIR(m) directory? S_ISCHR(m) character device? S_ISBLK(m) block device? S_ISFIFO(m) FIFO (named pipe)? S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.) S_ISSOCK(m) socket? (Not in POSIX.1-1996.) ****************************************************** There are three functions given you can use. ****************************************************** int stat(const char *restrict pathname, struct stat *restrict buff); int fstat(int filedes, struct stat *restrict buff); int lstat(const char *restrict pathname, struct stat *restrict buff); ****************************************************** */ #include <stdio.h> #include <sys/stat.h> int main(int argc,char **argv) { struct stat buff; int i = 0; for(i = 1;i < argc;i++) { printf("%s:",argv[i]); if(lstat(argv[i],&buff) < 0) { printf("lsata error!!\n"); continue; } if(S_ISREG(buff.st_mode)) printf("regular file\n"); else if(S_ISDIR(buff.st_mode)) printf("Directory file\n"); else if(S_ISCHR(buff.st_mode)) printf("character special\n"); else if(S_ISBLK(buff.st_mode)) printf("Block special\n"); else if(S_ISFIFO(buff.st_mode)) printf("FIFO file\n"); else if(S_ISLNK(buff.st_mode)) printf("Link file\n"); else if(S_ISSOCK(buff.st_mode)) printf("socket file\n"); } return 1; }