fcntl函数 非阻塞轮询

 

fcntl() 在打开的文件描述符 FD 上执行下面描述的操作之一。 操作由 cmd 确定。

fcntl() 可以采用可选的第三个参数。 是否需要此参数由 cmd 确定。 所需的参数类型在后面的括号中指示。


每个cmd名称(在大多数情况下,所需的类型是int,我们使用名称arg来标识参数),或者如果不需要参数,则指定void。

下图是对是否需要设置可变参数的解释:

 

#include <iostream>#include <cstdlib>#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <cstring>#include <cerrno>void SetNonBlock(int fd){// 提取文件描述符属性(返回值是一个位图)int f1 = fcntl(0, F_GETFL);if (f1 < 0){perror("fcntl");return;}// 使用F_SETFL将文件描述符设置回去,加上O_NONBLOCK参数。fcntl(0, F_SETFL, f1 | O_NONBLOCK);}int main(){char buffer[1024];SetNonBlock(0); // 设置非阻塞。while (true)//轮询{sleep(1);printf(">>> ");fflush(stdout);ssize_t n = read(0, buffer, sizeof(buffer) - 1); // (检查条件是否就绪)等+拷贝if (n > 0){buffer[n - 1] = 0; // 因为从标准输入读取,回车键也会放入内核缓冲区,被上层读取。std::cout << "echo# " << buffer << std::endl;}else if (n == 0){std::cout << "end file" << std::endl;}else{// 区分是真正出错还是数据没有就绪这两种情况。if (errno == EAGAIN || errno == EWOULDBLOCK){// 底层数据没有就绪,希望你下次继续来检测std::cout<<"data not ready"<<std::endl;continue;}else if (errno == EINTR){// 这次I/O被信号中断,也需要重新读取continue;}else{//真正出错std::cout << "WARNING!!!  ERRNO: " << errno << ",error: " << strerror(errno) << std::endl;break;}}}return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/145603.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL学习笔记23

逻辑备份&#xff1a; 1、回顾什么是逻辑备份&#xff1f; 逻辑备份就是把数据库、数据表或者数据进行导出&#xff0c;导出到一个文本文件中。 2、逻辑备份工具&#xff1a; mysqldump&#xff1a;提供全库级、数据库级别以及表级别的数据备份。 mysqldumpbinlog&#xff…

【汇编的救赎】汇编语言入门必看基本知识点

汇编语言是一种低级语言&#xff0c;用于编写计算机程序。它直接操作计算机硬件&#xff0c;提供了对处理器寄存器、内存和指令等底层资源的直接访问。汇编语言的语法简单明了&#xff0c;每条指令都对应着一条机器指令&#xff0c;具有高度的灵活性和效率。通过汇编语言&#…

BUUCTF reverse wp 81 - 85

[SCTF2019]babyre 反编译失败, 有花指令 有一个无用字节, 阻止反编译, patch成0x90 所有标红的地方nop掉之后按p重申函数main和loc_C22, F5成功 int __cdecl main(int argc, const char **argv, const char **envp) {char v4; // [rspFh] [rbp-151h]int v5; // [rsp10h] [rb…

com.alibaba.csp.sentinel.slots.block.flow.FlowException: null--记录一次报错

阿丹&#xff1a; 记录一次开发中遇到的错误。 报错信息描述&#xff1a; 2023-10-01 09:47:57.263 ERROR 39572 --- [nio-9100-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exce…

图像处理: ImageKit.NET 3.0.10704 Crack

关于 ImageKit.NET3 100% 原生 .NET 图像处理组件。 ImageKit.NET 可让您快速轻松地向 .NET 应用程序添加图像处理功能。从 TWAIN 扫描仪和数码相机检索图像&#xff1b;加载和保存多种格式的图像文件&#xff1b;对图像应用图像滤镜和变换&#xff1b;在显示屏、平移窗口或缩略…

jenkins联动显示或隐藏参数

1. 添加组件 Active Choices Plug-in 如jenkins无法联网&#xff0c;可在以下两个地址中下载插件&#xff0c;然后放到/home/jenkins/.jenkins/plugin下面重启jenkins即可 Active Choices Active Choices | Jenkins plugin 2. 效果如下&#xff1a; sharding为空时&#xf…

Linux内核存在缺陷发行陷困境

导读Linux内核已经修复了本地特权esclation缺陷&#xff0c;但是几个上游分发版本例如Red Hat&#xff0c;Canonical和Debian发行版尚未发布更新。管理员应计划减轻Linux服务器和工作站本身的漏洞&#xff0c;并监控其更新计划的发布。 内核缺陷仍存在 在Linux内核4.10.1(CVE-…

预编译(2)

#和## #运算符&#xff1a; #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中。 #运算符所执⾏的操作可以理解为“字符串化”。 举例&#xff1a; 当我们有⼀个变量 int a 10; 的时候&#xff0c;我们想打印出&#xff1a; the value of …

Linux 基本语句_4_指针和函数

指针函数 顾名思义&#xff0c;即返回值为指针的函数 int * f (int n){int *p NULL;//空指针return p;//返回一个地址 }函数指针 指向函数的指针&#xff0c;每个函数都有自己的入口地址&#xff0c;函数指针专门指向这些地址#include <stdio.h>int max(int a, int b)…

数据挖掘(1)概述

一、数据仓库和数据挖掘概述 1.1 数据仓库的产生 数据仓库与数据挖掘&#xff1a; 数据仓库和联机分析处理技术(存储)。数据挖掘&#xff1a;在大量的数据中心挖掘感兴趣的知识、规则、规律、模式、约束(分析)。数据仓库用于决策分析&#xff1a; 数据仓库&#xff1a;是在数…

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.3p2(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

[docker]笔记-网络故障处理

1、同事在虚拟机上部署docker&#xff0c;发现电脑无法登录虚拟机了。首先ping测是通的&#xff0c;从我电脑继续进行登录测试发现没问题&#xff0c;初步判断是她电脑网络和虚拟机网络之间连接出错。 2、进行虚拟机登录查看&#xff0c;首先使用route -n命令查看路由&#xf…

layui+java spring 实现图片文件新增到数据库

项目场景&#xff1a; layuijava spring 实现图片文件新增到数据库 解决方案&#xff1a; 1.首先layui是个不再更新的网址有想了解的可以浏览官网 表格组件 table - Layui 文档 2.官网内有专门的组件 代码直接粘过来即可 <!DOCTYPE html> <html> <head> …

day49 jdbc技术

一、概述 什么是JDBC Java DataBase COnnectivity Java 数据库连接 其实就是利用Java程序连接并访问数据库的一种技术 为什么要学习JDBC 之前我们是通过终端&#xff0c;或者第三方工具直接连接数据库 在企业开发中&#xff0c;更多的是通过程序来连接数据库的 未来学习的M…

JJJ:添加开机自启动项

比如我希望一个截图软件能开机自启动&#xff1a; 1、打开任务管理器&#xff1a; 进入启动栏&#xff1a; 发现没有snipaste可以设置 2、win r&#xff0c; 输入 shell:startup 然后回弹出一个新的窗口&#xff0c;把截图软件的快捷方式放里头 这样snipaste就能开机自启动…

排序篇(三)----交换排序

排序篇(三)----交换排序 1.冒泡排序 基本思想: ​ 通过不断地比较相邻的元素&#xff0c;将较大的元素往后移动&#xff0c;从而实现排序的目的。 具体的步骤如下&#xff1a; 从待排序的数组中选择相邻的两个元素进行比较&#xff0c;如果前一个元素大于后一个元素&#…

【IDEA】maven项目添加模块时,webapp没有被标识,无法识别的解决方法

问题 新添加maven项目模块后&#xff0c;webapp目录未被标识&#xff0c;即没有小蓝点的图标显示。如下图 解决方法 点击“File”下的“Project Strucure”&#xff0c;在弹出的框中&#xff0c;选中“Modules”下的项目名称&#xff0c;也就是“demo1”&#xff0c;点击“…

ASUS华硕ZenBook 13灵耀U 2代U3300F笔记本UX333FN/FA原装出厂Win10系统工厂安装模式

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接&#xff1a;https://pan.baidu.com/s/1dK0vMZMECPlT63Rb6-jeFg?pwdbym5 所需要工具&#xff1a;16G或以上的U盘(非必需) 文件格式&#xff1a;HDI,SWP,O…

FPGA设计时序约束二、输入延时与输出延时

目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…

整理mongodb文档:副本集二

个人博客 整理mongodb文档:副本集二 个人博客&#xff0c;求推荐&#xff0c;本片内容较为乱 文章概叙 本文章主要讲在MongoDB的副本集中的一些注意点&#xff0c;主要是如何对seconadry进行数据操作&#xff0c;以及对更新数据的一些介绍 查看当前节点 上一集讲了关于搭…