Linux网络编程--自定义套接字描述符判定函数issockettype

来源:互联网 发布:西医综合网络课程 编辑:程序博客网 时间:2024/06/07 07:02

套接字描述符和通用文件描述符在形式上没有区别,那么如何判断一个文件描述符是否是套接字描述符呢?下面我们就简单的自定义一个函数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

1 0