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

如果查询网站内页的收录情况做企业网站有哪些系统

如果查询网站内页的收录情况,做企业网站有哪些系统,wordpress去掉底部版权,1688加工厂接单Socket 是网络协议栈暴露给编程人员的 API#xff0c;相比复杂的计算机网络协议#xff0c;API 对关键操作和配置数据进行了抽象#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具#xff0c;和其他平台#xff08;比如 os-x … Socket 是网络协议栈暴露给编程人员的 API相比复杂的计算机网络协议API 对关键操作和配置数据进行了抽象简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具和其他平台比如 os-x 及不同版本会有些出入。本文主要对各 API 进行详细介绍从而更好的理解 socket 编程。 select 遵循 POSIX.1 - 2008 1.库 标准 c 库libc, -lc 2.头文件 sys/socket.h 3.接口定义 int select(int nfds, fd_set *_Nullable restrict readfds,fd_set *_Nullable restrict writefds,fd_set *_Nullable restrict exceptfds,struct timeval *_Nullable restrict timeout); 4.接口描述 首先我们需要注意 select 只能监听少于 FD_SETSIZE(1024)  个文件描述符这在现在看来是非常不合理的如果想不受这个限制需要使用 poll 或者 epool。 select 可以同时监听多个文件描述符只要有一个文件描述符有操作需求时即返回。文件描述符有操作需求指的是可以马上进行相关的 I/O 操作比如 read 或者少量的写操作。 fd_set 一个表示一组文件描述符的结构体根据 POSIX 要求结构中最大文件描述符数量为 FD_SETSIZE。 File descriptor set select() 接口重要的参数是 3 个文件描述符集合以 fd_set 类型声明这允许调用者在指定的文件描述符集合上等待 3 种类型的事件。每个 fd_set 参数都可以是 NULL只要没有文件描述符集需要监听对应的事件。 值得注意的是一旦接口返回每个文件描述符集都被更新来指示哪些文件描述符就绪了。因此如果在一个循环中使用 select()集合必须每次调用前重新初始化。 文件描述符集的内容可以使用以下宏来操作 FD_ZERO() 这个宏用来清除集合中的所有文件描述符是初始化文件描述符集的第一步。 FD_SET() 这个宏用来向集合中添加文件描述符如果文件描述符已经存在那么也不会报错只是不进行任何操作。 FD_CLR() 这个宏用来从集合中移除指定文件描述符如果文件描述符不存在则不进行任何操作。 FD_ISSET() select() 根据如下规则更新集合内容select() 调用结束后FD_ISSET() 宏用来检测指定文件描述符是否还位于集合中如果存在则返回非 0 值否则返回 0。 5.参数 1readfds 这个集合中的文件描述符用来监测其受否已经读就绪。一个文件描述读就绪指的是读操作不会阻塞特别的是EOF 也算是读就绪。 select() 函数返回后readfds 中只会保留读就绪的文件描述符其他都会被删除。 2writefds 这个集合中的文件描述符用来监测其受否已经写就绪。一个文件描述写就绪指的是写操作不会阻塞。不过即使一个文件描述符已经写就绪但是大块的写操作可能也会阻塞。 select() 函数返回后writefds 中只会保留写就绪的文件描述符其他都会被删除。 3eceptfds 这个集合中的文件描述符用来监测其异常情况一些异常情况的示例在 poll() 的 POLLPRI 中会有讨论。 select() 返回后exceptfds 中只保留发生异常情况的文件描述符。 4nfds 这个参数应该被设置为 3 个集合中文件描述符的最大值加 1。 5timeout timeout 是一个 timeval 的结构指定了 select() 等待文件描述符就绪的时间这个接口会一直阻塞直到以下事件发生 文件描述符就绪调用被信号处理打断timeout 超时 值得注意的是timeout 值会向上rounded up近似到系统时钟粒度另外由于系统调度延迟可能会导致阻塞间隔比 timeout 稍微大一些。 如果 timeout 的两个成员都为 0那么 select 会立即返回通常用于轮询。 如果 timeout 是 NULLselect 会无限期等待直到有文件描述符就绪。 6.pselect() pselect() 系统调用能够允许应用更安全的等待文件描述符就绪或者信号发生。 它和 select() 是一样的除了以下几个地方 select() 使用 timeval 结构的 timeout而 pselect() 使用 timespec 结构 的timeoutselect() 可能会更新 timeout 参数来指示还有多少剩余时间而 pselect() 不会select() 没有信号屏蔽 sigmask 参数相当于 pselect 的sigmask 参数为 NULL sigmask 是一个指向信号屏蔽的指针。如果它不为空那么 pselect() 首先会使用它代替当前的信号屏蔽然后在进行 select()最后再恢复原来的信号屏蔽。如果是 NULL那么 pselect() 调用过程并不会改变信号屏蔽值。 除了时间精度上的差异下面两端代码等效 ready pselect(nfds, readfds, writefds, exceptfds,timeout, sigmask);sigset_t origmask;pthread_sigmask(SIG_SETMASK, sigmask, origmask); ready select(nfds, readfds, writefds, exceptfds, timeout); pthread_sigmask(SIG_SETMASK, origmask, NULL);设计 pselect() 的原因是想要等待信号发生或者文件描述符就绪那么就需要一个原子测试来解决数据竞争问题。比如一个信号处理函数设置了一个标志并返回如果信号刚好在测试的附近到达导致数据竞争时 select() 后面测试这个标志有可能无限期卡住。而 pselect() 允许先屏蔽信号处理已经发生的信号然后使用指定 sigmask 来调用 pselect() 避免了数据竞争。 timeout select() 的 timeout 结构体定义如下 struct timeval {time_t tv_sec; /* seconds */suseconds_t tv_usec; /* microseconds */}; pselect() 对应的结构体时 timespec。 Linux 系统上 select() 会修改 timeout 值来反映未睡眠的时间其他实现不是这么做的。POSIX.1 认为任何行为都是合法的。这就会导致 Linux 系统和其他系统之间的移植问题所以我们应该认为 timeout 在 select() 后是未知的值。 7.返回值 成功时select() 和 pselect() 返回三个返回文件描述符集中的文件描述符总数也就是 redfds、writefds、exceptfds 的中设置为 1 位数。返回值可以为 0表示在有文件描述符就绪前 timeout 超时。 发生错误时返回 -1并设置errno 来指示错误类型。文件描述符集并不会被修改timeout 值是未定义的。 错误值定义如下 EBADF集合中存在不合法的文件描述符比如已经关闭的文件描述符或者发生错误的文件描述符具体参见 BUGSEINTR捕获了一个信号具体参见 signal(7)EINVALnfds 是负值或者超过了 RLIMIT_NOFILE 资源限制具体参见getrlimit(2)EINVALtimeout 中的数值不合法ENOMEM没有足够内存来分配内部表 在其他 UNIX 系统上如果系统无法分配内核资源select() 可能会返回 EAGAIN 错误而不是 ENOMEM。POSIX 为 poll() 定义了该错误但是并没有为 select() 定义。考虑到程序的移植性应该检查 EGAIN 并重新调用就行 EINTR 处理一样。 8.注意 sys/time.h 也提供了 fd_set 的定义fd_set 是一个固定大小的缓冲区执行 FD_CLR 和 FD_SET 传入一个负值或者大于 FD_SETSIZE 的 fd 会导致不可预期的结果。此外POSIX 要求 fd 是一个可用的文件描述符。 select() 和 pselect() 操作不受 O_NONBLOCK 标志的影响。 self-pipe 小技巧 在没有 pselect() 实现的系统上可靠更具有移植性的信号捕捉可以通过 self-pipe 小技巧实现。这个技术在信号处理函数中向一个 pipe 中写入 1 字节而该 pipe 的另一端由 select() 监听。为了防止满写阻塞和空读阻塞pipe 的读写应采用非阻塞 I/O 方式。 模拟 usleep 在 usleep 出现前一些代码使用 select() 来实现一种可移植的亚秒精度延迟将所有集合设置为空nfds 为 0非空的 timeout值。 select() 和 poll() 间通知的映射 在 linux 代码树中我们可以发现 select() 读、写、异常通知和 poll()/epoll() 事件通知之间的联系 #define POLLIN_SET (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |EPOLLHUP | EPOLLERR)/* Ready for reading */#define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT |EPOLLERR)/* Ready for writing */#define POLLEX_SET (EPOLLPRI)/* Exceptional condition */ 多线程应用 如果一个线程通过 select() 监听的文件描述符被另一个现场关闭那么结果是未知的。在一些 UNIX 系统上select() 会停止阻塞并返回告知文件描述符就绪后续操作会出错除非刚好其他线程又打开了文件描述符并且就绪了。在 Linux 及其他系统上其他线程关闭文件描述符对 select() 没有任何影响。总结起来应用如果依赖这些 具体的行为的话就会产生 bug。 C 库和内核的差异 Linux 内核允许文件描述符集是任意大小的由 nfds 的值来决定具体的大小。而 glibc 将fs_set 类型设置为固定值。参考 BUGS。 我们这里讲述的 pselect() 接口是 glibc 实现的底层系统调用名字是 pselect6()系统调用的行为和 pselect() 有些许不同。 Linux 的 pselect6() 系统调用修改 timeout 参数然而 glibc 通过本地缓存 timeout 值隐藏了该行为。因此glibc  pselect6() 没有修改 timeout 参数这也符合 POSIX.1-2001 要求。 pselect6() 系统调用的最后一个参数不是 sigset_t * 指针类型而是如下格式 struct {const kernel_sigset_t *ss; /* Pointer to signal set */size_t ss_len; /* Size (in bytes) of objectpointed to by ss */}; 这使得系统调用可以获取信号集指针及其大小并考虑到大多数系统支持最大 6 个系统调用参数这个事实。关于信号处理的差异之处可以参考 sigprocmask 的讨论。 glibc 历史细节 gblic 2.0 提供了 pselect() 的错误版本它并没有 sigmask 参数。 glibc 2.1 到 2.2.1为了获得 sys/select.h 中的 pselect() 声明必须定义 _GNU_SOURCE 宏。 9.BUGS POSIX 允许实现通过 FD_SETSIZE 来定义文件描述符集中文件描述符的上限Linux 内核并没有限制但是 glibc 实现将 fd_set 定为固定长度并将 FD_SETSIZE 设置为 1024FD_*() 宏根据这个限制操作。为了能够监测多余 1023 个文件描述符可以使用 poll() 或者 epoll。 fd_set 参数的输入输出属性是一个错误的设计已经在 poll() 和 epoll() 改正过来。 根据 POSIX 要求select() 应该检查所有集合中的文件描述符不能超过 nfds - 1但是当前实现会忽略掉那些文件描述符值大于当前进程打开的最大文件描述符值。根据 POSIX 要求这些文件描述符会导致 EBADF 错误。 从 glibc 2.1 开始glibc 使用 sigprocmask() 和 select() 实现了 pselect() 模拟这个实现却遗留了 pselect() 解决的数据竞争问题。现在版本的 glibc 通常使用内核提供的不受数据竞争影响的 pselect() 系统调用。 Linux 上select可能报告 socket 文件描述符读就绪但是后续的读却会阻塞这个常发生在数据已达到但是数据的校验和不对数据被丢弃。当然也可能是误报。所以使用 O_NONBLOCK 的 sockets 更安全些。 Linux 上的 select() 会在被信号打断的情况下更新 timeout 值POSIX.1 并不允许这样做。Linux 的 pselect() 是同样的行为但是 glibc 隐藏了这种行为。  10.代码实例 #include stdio.h#include stdlib.h#include sys/select.hintmain(void){int retval;fd_set rfds;struct timeval tv;/* Watch stdin (fd 0) to see when it has input. */FD_ZERO(rfds);FD_SET(0, rfds);/* Wait up to five seconds. */tv.tv_sec 5;tv.tv_usec 0;retval select(1, rfds, NULL, NULL, tv);/* Dont rely on the value of tv now! */if (retval -1)perror(select());else if (retval)printf(Data is available now.\n);/* FD_ISSET(0, rfds) will be true. */elseprintf(No data within five seconds.\n);exit(EXIT_SUCCESS);}
http://www.lakalapos1.cn/news/56029/

相关文章:

  • wordpress几个网站共用用户汉中专业网站建设
  • 网页制作初学者南阳做网站seo的
  • 网站建设168wordpress4.7好难用
  • 网站建设属于移动互联网凡科登录入口下载
  • 网站模板破解下载毕业设计做系统跟做网站哪个容易
  • 网站备案要到哪里网站seo查询工具
  • 大型网站建设兴田德润赞扬s001网站建设设计
  • 跨境电商平台网站建设upupw搭建wordpress
  • 泸州市建设局网站怎样查看一个wordpress网站插件
  • 做电商引流软文网站河北邢台官方网站
  • 做问答网站要多少钱wordpress 登录页
  • 大连网站建设方案平面设计招聘58同城
  • 做外贸雨伞到什么网站背景全屏网站
  • 网站开发页面大小适应屏幕常宁网页设计
  • 网站定制设计价目表网站是哪家公司做的
  • 网站模板大全下载腾讯云服务器多少钱一个月
  • 怎么把自己做的网站传网上好的营销网站
  • 辽阳市建设行业培训中心网站通用网站后台管理系统(php版)
  • 招聘网站建设策划书中山有做网站的公司吗
  • 广州天河建网站wordpress 默认 私密
  • 单页面个人网站有做网站的吗 优帮云
  • 关于网站建设 策划文案网页制作源代码
  • 如何做外卖网站app微信机器人 wordpress 插件
  • 网站免费优化软件用asp做网站系统步骤
  • 电子商务与网站建设的发展综述wordpress 的客户
  • 云南政务网站建设网站开发工作 岗位怎么称呼
  • 国内优秀网页设计网站婚纱摄影网站开发背景
  • 自己怎么做云购网站wordpress 开发版 视频
  • 烟台企业网站建设网络架构方案书
  • 高新区建网站外包wordpress主题阁