【发布时间】:2019-04-12 18:16:10
【问题描述】:
我有一个程序,当我无法打开管道进行读取时,我想退出 N(比如说 30)秒。
我的代码适用于阻塞名称管道,我无法更改这一点。
我知道 select() 和 poll(),但如果不将管道变为非阻塞状态,我无法让它们工作。
这是我目前的代码:
struct pollfd fds[1];
int pol_ret;
fds[0].fd = open(pipe_name, O_RDONLY /* | O_NONBLOCK */);
if (fds[0].fd < 0)
{
// send_signal_to_parent();
std::cout << "error while opening the pipe for read, exiting!" << '\n';
return -1;
}
fds[0].events = POLLIN;
int timeout_msecs = 30000; // (30 seconds)
pol_ret = poll(fds, 1, timeout_msecs);
std::cout << "poll returned: "<< pol_ret << '\n';
if (pol_ret == 0)
{
std::cout << "im leaving" << '\n';
return -1;
}
我怎样才能只等待 30 秒才能打开管道以供读取?
我正在运行 Linux,尤其是 debian。
【问题讨论】:
-
Linux,尤其是 debian。
-
对于
select()和poll()都有变体等待您指定的特定超时。另见1, -
请至少提供一些代码示例,并解释究竟是什么不工作。
-
@πάνταῥεῖ 我知道,但我不知道该怎么做。你能举个例子吗?
-
向我们展示不适合您的代码,并解释您不喜欢的代码。
标签: c++ linux named-pipes polling