当前位置: 首页 > news >正文

网站开发软件著作权归谁wordpress 查看图片

网站开发软件著作权归谁,wordpress 查看图片,wordpress 免插件实现,广西网站开发建设非阻塞IO fcntl 一个文件描述符, 默认都是阻塞IO。fcntl可以将某个文件描述符设置为非阻塞IO,先看一下文档介绍。 传入的cmd的值不同,后面追加的参数也不相同。 fcntl函数有5种功能: 复制一个现有的描述符(cmd F_DUPFD)。获得…

非阻塞IO

fcntl

一个文件描述符, 默认都是阻塞IO。fcntl可以将某个文件描述符设置为非阻塞IO,先看一下文档介绍。

image-20230804222205876

传入的cmd的值不同,后面追加的参数也不相同。
fcntl函数有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)。

我们此处只是用第三种功能, 获取/设置文件状态标记, 就可以将一个文件描述符设置为非阻塞。

实现函数SetNonBlock

基于fcntl函数,我们实现一个SetNonBlock函数,将文件描述符设置为非阻塞。

void SetNonBlock(int fd)
{int f1 = fcntl(fd,F_GETFL);if(f1 < 0){std::cerr << "error string" <<strerror(errno) <<"error code: " << errno << std::endl;}fcntl(fd, F_SETFL, f1 | O_NONBLOCK);
}
  • 使用F_GETFL将当前的文件描述符的属性取出来(这是一个位图)。
  • 然后再使用F_SETFL将文件描述符设置回去。设置回去的同时,加上一个O_NONBLOCK参数

实现:

轮询方式读取标准输入,同时还可以执行其他任务。

#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <cstdio>
#include <vector>
#include <functional>void PrintLog()
{std::cout << "这是一个打印日志的例程" << std::endl;
}
void OperMySQL()
{std::cout << "这是一个操作数据库的例程" << std::endl;
}
void CheckNet()
{std::cout << "这是一个检测网络的例程" << std::endl;
}using func_t = std::function<void (void)>;
std::vector<func_t> funcs;void LoadTask()
{funcs.push_back(PrintLog);funcs.push_back(OperMySQL);funcs.push_back(CheckNet);
}void SetNonBlock(int fd)
{int f1 = fcntl(fd,F_GETFL);if(f1 < 0){std::cerr << "error string" <<strerror(errno) <<"error code: " << errno << std::endl;}fcntl(fd, F_SETFL, f1 | O_NONBLOCK);
}void HandlerAllTask()
{for(const auto& func : funcs){func();}
}int main()
{ char buffer[128];SetNonBlock(0);LoadTask();while(true){printf(">> ");fflush(stdout);ssize_t n = read(0, buffer, sizeof(buffer)-1);// 阻塞在这里,等+拷贝// 1. 读取成功if(n > 0){buffer[n-1] = 0;std::cout << "echo # " << buffer << std::endl;}// 2. 读取结束else if(n == 0){std::cout << "end file" << std::endl;break;}// 3. 读取失败,一旦设置fd为非阻塞,底层没有数据就绪,就以出错返回,但是不算真正的出错else{if(errno == EAGAIN || errno == EWOULDBLOCK){// 底层没有数据,再次读取sleep(1);HandlerAllTask();std::cout << "data not ready" << std::endl;continue;}else if(errno == EINTR){// IO被信号中断,重新读取continue;}else{std::cerr << "read error - " << "error string: " <<strerror(errno) <<"error code: " << errno << std::endl;break;}}}return 0;
}
http://www.yayakq.cn/news/812177/

相关文章:

  • 微网站门户网站建设预览
  • 用户网站建设网站定制建设
  • 常州建设网站贷款织梦网站模版
  • 长春网站外包西昌城乡建设网站
  • 公司网站建设的系统功能需求网站快速收录技术
  • 做网站主页图片一般多少m温州建设学校网站
  • 长沙网站排名优化费用商业网点是什么意思
  • 幸运飞艇网站建设郑州网站建设如何
  • 淄博专业网站建设价格梧州高端网站建设服务
  • 西部数码空间可以做会所网站吗黄石网站建设哪家专业
  • 无锡网站制作方案大连网站开发建站
  • 为什么建设银行网站打不开wordpress空白页面模板
  • 广西建设学院网站湖州微网站建设
  • 织梦制作手机网站模板网站开发步骤规划
  • 自己建的网站能赚钱吗中国建设银行贵州省分行网站
  • 上海网站排名公司网站服务器租用哪家好
  • 整个网站建设中的关键步骤是vi设计公司平台哪个好
  • 织梦可以仿所有网站吗企业管理咨询服务内容
  • 沧州网站建设联系电话平面设计接单攻略电子书
  • 手机网站模版建站平台最便宜
  • 做磁性材料在哪些网站推广比较好c asp.net网站开发书
  • 整站优化深圳网站平台设计费用多少
  • 哈尔滨龙彩做网站多少钱中国最大的软件开发公司
  • 网站内容优化方案手机设计网站
  • 从网站优化之角度出发做网站策划在哪里可以查公司注册信息
  • 浙江鼎兴建设有限公司网站铭誉摄影网站
  • ps国外教程网站网站开发建设专业
  • 怎么做微信里的网页网站链接四川seo推广方案
  • 怎么确认网站是什么语言做的网页制作的公司企业
  • 怎样用模板建一个网站上海网站网络科技有限公司