大家好,又见面了,我是你们的朋友全栈君。
一、fcntl
fcntl 函数用于执行各种描述符控制操作;
代码语言:javascript复制/* 返回值:成功取决于cmd,失败返回-1; * 定义: */
#include <fcntl.h>
int fcntl(int sockfd, int cmd, /* int arg */);
/* 说明: * 第三个参数可有可没有,根据需要给出; */
函数有下面5种功能:
- 复制一个现有的描述符(cmd=F_DUPFD);
- 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD);
- 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL);
- 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN);
- 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW);
这里介绍如何将描述符设置为非阻塞的方法;
代码语言:javascript复制flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
/* 通过fcntl获取当前描述符fd的文件状态标记, * 然后将之与非阻塞标志O_NONBLOCK进行或操作再进行设置; */
其他功能详细介绍参考:fcntl函数详解 ;
二、ioctl
ioctl函数一些功能与fcntl函数是重叠的,主要功能为影响由参数fd打开的文件。
代码语言:javascript复制/* 返回值:成功返回0,出错返回-1;*/
#include <unistd.h>
int ioctl(int fd, int request, /* void *arg */);
/* 说明: * fd为描述符,request为执行操作参数,由一系列定义的宏来决定,arg为一个指针, * 类型由request决定; */
ioctl与网络相关的请求可以划分为6类:
- 套接口操作
- 文件操作
- 接口操作
- ARP 高速缓存操作
- 路由表操作
- 流系统
对于每一种操作,都有几个不同的功能参数,这里不详细介绍,具体参考:ioctl用法详解;或UNIX网络编程卷1 :套接字联网API;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226889.html原文链接:https://javaforall.cn