问题标签 [posix-select]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1411 浏览

c - 使用 select() 监控管道时出现分段错误

我正在做一个项目,其前提是创建一个进程树,其中父进程通过管道向其两个子进程中的每一个发送一半的字符串(数字),然后,当数字<=2时数字出现并传递计数的次数(希望以整数数组的形式,返回给父级。

我仍处于构建这个东西的初始阶段,我一直在使用select(); 现在我在尝试执行程序时收到 SEG_FAULT,当我将它扔到 Eclipse 中时,错误(列为 EXC_BAD_ACCESS:无法访问内存)似乎在我第二次尝试将文件描述符设置为读取时发生fd 设置。

我无法弄清楚问题出在哪里。这段代码的大部分与这个问题没有任何关系,但我把它包括在内,以防我在某个地方犯了一个草率的错误。该问题似乎出现在 bit_count 函数中。我给它贴上了标签。

}

0 投票
1 回答
3562 浏览

c - 将 select() 与管道一起使用

这个想法是创建一个二叉进程树,将信息沿树发送,然后将值发送回树,在信息上升时聚合信息。

我遇到的问题是使用select()来确定何时准备好读取管道。在我到目前为止所写的内容中,第一个管道(第一个左孩子)能够接收信息并打印出来;但是第二个管道(第一个右孩子)在收到任何信息之前超时。我不知道为什么,因为第一个管道工作得很好。

每个孩子最终都会创造出自己的孩子,如果没有更好的处理方法,我什至无法开始这部分过程select()

0 投票
1 回答
1172 浏览

c - 使用 select() 调用文件 I/O 的 Pthread 生产者/消费者

我正在尝试提高我正在使用 OpenCV 在嵌入式 Linux 计算机上运行的实时计算机视觉程序的捕获性能。我想使用多个线程和一个共享内存缓冲区来分离(1)捕获视频帧和(2)处理它们的任务(我相信这是一个“生产者/消费者问题”)。我已经阅读了 pthread、互斥变量和条件变量,但不明白如何将它们与select()函数一起使用。

现在,视频帧是使用改编自Video4Linux2 视频捕获示例的代码捕获的,该示例使用select(). 据我了解,select()在网络摄像头提供数据之前会阻止程序,这可能会很慢并且会浪费大量时间。如果可能的话,我想利用那些浪费的 CPU 周期来处理图像。(当然,这意味着必须始终对“陈旧”一帧的图像进行处理,但在 30 fps 时它实际上是实时的)。

我找到了一些使用和保护共享数据的示例代码,但似乎这些代码仍然会阻止“处理”线程在通过. 更具体地说,这里有一些伪代码来说明我的担忧。(注意:我意识到这些线程需要包含循环和其他检查,如上面链接的示例才能真正正常工作。)pthread_mutex_lock()pthread_mutex_control()select()

0 投票
1 回答
6943 浏览

sockets - 使用这么多 CPU 能力的 select() 有什么问题?

我正在使用非阻塞套接字 (C/C++) 和select. 这个程序很大,所以我不能上传源代码。在一个非常激进的测试会话中,我使用测试代码频繁地打开和关闭 TCP 和 UDP。它总是最终导致一端没有响应并且 CPU 使用率超过 98 或 99%。然后我使用gdb来附加。“bt”显示以下内容:

可能是什么类型的错误?

0 投票
1 回答
162 浏览

c++ - 在选择功能中检测超时客户端

我想使用该select函数来处理不同的文件描述符。当程序启动时,它必须按照一个时间间隔开始向其他客户端发送数据包。我的第一个问题是如何在主 while 循环中使用计时器而不中断 while 循环和 select 函数的功能?那是因为我需要在计时器运行时接受用户输入。

第二个问题是,如果我需要将 send 函数放在我的 while 循环中,我现在不需要。当程序进入while循环时我需要编写发送函数还是需要在其他地方使用它?

此外,程序必须检测在特定时间未激活的文件描述符。如何检测哪些文件描述符没有向服务器发送任何数据包?

下面你可以看到我到目前为止写的代码。你能帮我修一下吗?我还没有在这里使用任何计时器。此外,该程序无法检测到哪个文件描述符已超时。

0 投票
3 回答
4138 浏览

python - 不能在 Mac OS 中使用 Python select.poll?

0 投票
1 回答
118 浏览

c++ - STDIN 防止激活其他文件描述符

编写以下程序来接收客户端的消息并从键盘读取用户输入:

问题是,当我按下键盘上的“回车”键并激活“0”文件描述符时,程序将永远不会激活任何其他文件描述符,它会锁定“0”文件描述符。我该如何修复这个错误?

0 投票
1 回答
5991 浏览

c - 使用 FD_SET 制作读写集以在 C 中发送和接收数据

我有一个客户端和服务器,客户端运行一个select循环以在 TCP 和 UDP 连接之间进行多路复用。我正在尝试将我的 TCP 连接文件描述符添加到setreadwriteset,然后使用 set 启动一个消息交换write,一个使用readset 启动一个消息交换。我与集合的消息通信write工作正常,但与read集合我无法这样做。

客户代码:

0 投票
1 回答
422 浏览

c++ - pselect() 和 accept() 在循环中

我有一个多线程服务器,它通过这些循环生成新线程:

大多数情况下,这按预期工作,但偶尔 pselect() 不会触发。我用 tcpdump 检查了它,知道数据是发送到服务器的,所以我认为它与主循环有关。

此外,如果在发送数据之前使用 gdb 运行并在 pselect() 上中断,则 pselect() 按预期返回 1。

以这种方式使用 pselect() 有什么问题吗?我应该如何解决这个问题?

0 投票
0 回答
132 浏览

select - 为什么 pselect 不调整超时参数?

select/ [1]的手册页pselect以及这篇 LWN 文章 [2] 明确提到对库函数的调用pselect不会修改 timeout 参数,而select调用可能会根据实现而有所不同。LWN 文章提到系统调用pselect确实修改了超时,并且库函数对调用者隐藏了它。

为什么pselect指定库方法不修改超时参数?知道是否有时间返回的定时方法似乎是一个有用的功能。

例如,我想等待某个 timespec 来接收 X 个字节。我可以实现一个循环来调用pselect等待数据,累积读取的任何数据,累积等待所花费的时间,然后根据是否读取了足够的字节或是否经过了足够的时间来决定是否再次循环。由于pselect没有用剩余时间修改超时参数,我将不得不调用gettimeofday来计算剩余时间窗口。

[1] http://man7.org/linux/man-pages/man2/select.2.html

[2] https://lwn.net/Articles/176911/