问题标签 [select-function]

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 回答
7662 浏览

c - 为什么以下打印“资源暂时不可用”?

为什么以下代码在 80% 的情况下打印“read():资源暂时不可用”?那是 EAGAIN 代码,与 WOULD BLOCK 相同,表示没有数据等待读取,但 select 返回 1 表示有数据(在 Linux 中测试):

0 投票
1 回答
1008 浏览

c - C 中的 Select() 问题(Windows 7)

我正在尝试创建一个使用 select() 来处理多个客户端的服务器,而不是我已经完成的多线程。然而 select() 似乎什么也没做?我有所有必要的系统调用,例如 socket() 返回一个名为 listener 的 int。bind() 然后 listen(),都带有适当的错误检查,不会返回任何问题。它也编译得很好。

客户端无法建立连接,但是 WSAGetLastError() 在客户端返回 0。并且服务器永远不会通过 select(),除了由于超时返回 0。我真的很难在我的代码中看到问题。

0 投票
1 回答
812 浏览

c - 管道和 select() 遇到问题

我似乎在使用管道和选择时遇到了问题。

上下文:必须编写一些将被shell执行的东西:
logn [--tick n] cmd [args] [, cmd [args]] ...

基本上,它是一个同时多个程序的程序。

约束:每个输出行必须以它的命令号开头,格式为 printf "%d: %s"
即:

如果已指定刻度,则系统将在 n 秒内未发送任何输出时打印一个句点。必须使用 select() 如果最后一个输出是一个句点,系统不会打印另一个句点。

问题:

  1. 似乎第二个命令的输出到第一个管道的 p[0] 。
    当我读入 p[0][0] 时,我得到了发送到 p[1][0] 的内容。p[1][0] 中似乎没有任何内容。

  2. 每当我的选择遇到超时时,它似乎就卡在那里了。

我之前问过一个问题,所以可能看起来很熟悉。由于问题不同,我发了一个新帖子。旧帖子帮助我弄清楚了分叉。

这是我的代码:

0 投票
1 回答
315 浏览

c - 套接字上的 select()(问题)

最近我做了部分代码。

它确实有效,但 select() 效果不佳。
当它从服务器获得最后一个回复时,它开始重复最后一个回复字符串,在回复字符串的开头有一些奇怪的字符。所以看看这个:

第一个字符串是来自服务器的最后一个回复。所以接下来的字符串只是一些垃圾。我试图在一些搜索引擎中寻找信息,但没有运气。

0 投票
2 回答
118 浏览

c - 选择使用 C 程序但不是 shell 失败

我有一个父子进程,父进程可以读取子进程的输出并发送到子进程的输入。到目前为止,使用 shell 脚本,测试输入和输出数据的命令一切正常。我刚刚用一个简单的 C 程序进行了测试,但无法让它工作。这是C程序:

C 程序的问题是我的选择无法从子 fd 读取,因此程序无法完成。这是进行选择的位..

有谁知道为什么这会发生在 C 程序而不是 shell 程序上?

编辑:我应该指出子进程在参数上调用 exec,所以我无法访问它。

0 投票
2 回答
7020 浏览

c - C 套接字编程:尽管从服务器发送了消息,但 select() 仍返回 0

我正在使用来自服务器select()的消息,使用 TCP/IP。recv()当我send()从服务器发送消息时,它会返回合理数量的字节,表示发送成功。当我使用whileloop 到 just时,它确实成功到达了客户端recv()。一切都很好,花花公子。

但是,当我尝试使用时select()select()从超时返回 0(设置为 1 秒)并且对于我的生活,我无法弄清楚为什么它看不到从服务器发送的消息。我还应该提到,当服务器断开连接时,select()也看不到,好像我要使用recv(),它会返回 0 以指示使用套接字的连接已关闭。任何输入或想法都深表感谢。

0 投票
3 回答
393 浏览

c - 选择行为

这可能是一个简单的问题,但我找不到明确的答案。我在 c 代码中有多个线程,其中一个使用 select 等待 n 秒。我的问题是它会阻塞整个进程 n 秒(如 usleep)还是 select 只阻塞调用线程(更像 nanosleep)。感谢您的回答。

0 投票
1 回答
2044 浏览

c - select() 中的问题并最终发送信号 SIGUSR1(C 语言)

我正在实现一个经典的 map-reduce 程序,其中我有一个父级,它生成 N 个子级(maps)+ 1 个(reduce)。父级通过未命名的管道向 N 个子级中的每一个发送信息。映射处理请求并发送结果,一个 int,以减少。reduce 进行选择并总结从 map 到 reduce 的管道上写入的每个计数器。

最后,reduce 必须发送带有结果的信号 SIGUSR1,但我的代码多次执行此操作并且错误,因为它始终在信号处理程序中打印 o。是代码的一部分:

在父级中,在创建管道和子级之后,我有这样的东西:

问题是reduce进程正确求和并正确打印,但是信号被发送了很多次,我只想要一个,即在wend向父级发送信号sigusr1,在pause()中被阻塞,然后打印全局 var 结果。

我怎样才能做到这一点?reduce有什么问题不是吗?

0 投票
5 回答
39246 浏览

c - C、socket编程:使用select()将多个客户端连接到服务器

我正在尝试制作一个可以由多个客户端连接的服务器。到目前为止,这是我的代码:

客户:

服务器:

一旦客户端连接并发送了它的第一条消息,服务器就会在无限循环中运行,并从消息数组中吐出垃圾。recv 似乎没有收到任何东西。谁能看到我哪里出错了?

0 投票
1 回答
115 浏览

c - 带有额外信息参数的 Linux 信号

我本来想在 sa_sigaction 处理程序的回调中有一些额外的信息,这似乎是不可能的。

所以我想知道你是否可以向我推荐替代方案。基本要求:

  1. 函数 A 使用指向结构的指针引发信号/事件
  2. 处理函数处理事件。
  3. 处理函数只会在事件上调用,并且循环等待事件,如 select() ,是不可取的。