标签:网络编程 套接字描述符 issocketty s-ifsock s-ifmt
套接字描述符和通用文件描述符在形式上没有区别,那么如何判断一个文件描述符是否是套接字描述符呢?下面我们就简单的自定义一个函数issockettype,用于套接字描述符判定。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
int issockettype(int fd)
{
struct stat st;
int err = fstat(fd, &st);//获得文件的状态
if( err < 0 ) {
return -1;
}
if((st.st_mode & S_IFMT) == S_IFSOCK) {
//利用系统宏,比较是否是套接字描述符
printf("普通文件描述符\t");
return 1;
} else{
printf("套接字描述符\t");
return 0;
}
}
int main(void)
{
int ret = issockettype(0);//查询标准输入是否是套接字描述符
printf("value %d\n",ret);//输出结果
int s = socket(AF_INET, SOCK_STREAM,0);//建立套接字描述符
ret = issockettype(s);//查询是否为套接字描述符
printf("value %d \n",ret);//输出结果
return 0;
}
运行结果:
套接字描述符 value 0
普通文件描述符 value 1
版权声明:本文为博主原创文章,未经博主允许不得转载。
Linux网络编程--自定义套接字描述符判定函数issockettype
标签:网络编程 套接字描述符 issocketty s-ifsock s-ifmt
原文地址:http://blog.csdn.net/hnlyyk/article/details/48024029