首页 > 代码库 > 通过fstat函数判断描述符类型
通过fstat函数判断描述符类型
fstat函数用于返回关于文件的信息到一个struct stat结构中,stat结构中的st_mode可以用来区分文件类型。
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 file system I/O */ blkcnt_t st_blocks; /* number of 512B 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 */ };
一些用来判断st_mode的宏
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.)
示例:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <sys/socket.h> #include <fcntl.h> #include <stdlib.h> main() { struct stat st; int sockfd, fd; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket error"); exit(-1); } fd = open("/home/liyuchen/dev/net.h", O_RDWR); if (fd == -1) { perror("open error"); exit(-1); } fstat(sockfd, &st); if (S_ISREG(st.st_mode)) printf("文件描述符\n"); if (S_ISSOCK(st.st_mode)) printf("套接字描述符\n"); fstat(fd, &st); if (S_ISREG(st.st_mode)) printf("文件描述符\n"); if (S_ISSOCK(st.st_mode)) printf("套接字描述符\n"); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。