繁体   English   中英

在C ++中与回调异步运行linux命令

[英]run linux command asynchronously with callback in c++

我正在尝试编写一个将异步运行linux命令并为linux命令的返回值注册回叫的c ++程序。 我真正想要的是编写一个实用程序函数,我将向其传递两个参数,一个是linux命令,另一个是回调。

当我们调用此实用程序功能时,它不应阻塞程序并继续执行程序。 但是一旦执行linux命令,它将调用我们作为第二个参数传递的回调。

我已经尝试过c ++ system()函数。 并尝试了boost.process标头来运行linux命令。 但是它们都是阻止从c ++调用linux调用的方式。

我是这种异步+回调寄存器类型编程的新手。

该程序应该与我在node.js程序中使用的node.js程序中尝试过的程序完全一样。 这对我来说非常有效,为此我遵循的链接是http://www.dzone.com/snippets/execute-unix-command-nodejs

请帮助我用C ++完成此任务。 我需要在c ++系统调用中进行哪些改进,这些改进对我来说运行得很好,但是却阻塞了。 还是我们在C ++或boost库中提供了一些直接的工具。

注意:我正在使用g ++ 4.3编译器。 它不是C ++ 0x或C ++ 11。

谢谢阿比舍克

尚不清楚要做什么,但是我认为这可以解决问题,这是一些C ++ 11代码:

#include <thread>
#include <future>
#include <string>
#include <iostream>
#include <type_traits>

void system(const std::string& s)
{ std::cout << "Executing system with argument '" << s << "'\n"; }


// asynchronously (1) invoke cmd as system command and (2) callback.
// return future for (1) and (2) to caller
template<typename F>                            
std::future<typename std::result_of<F()>::type> 
runCmd(const std::string& cmd, F callback)      
{                                               
  auto cmdLambda = [cmd] { system(cmd); };
  auto fut = std::async(std::launch::async,
                        [cmdLambda, callback] { cmdLambda(); return callback(); });
  return fut;  
}

int main()
{
  auto fut = runCmd("ls", []{ std::cout << "Executing callback\n"; });
  fut.get();
}

对于C ++ 98,可以将Boost.Threads用于期货和异步,还可以使用Boost.Bind来替换lambda。

这至少应该让您入门。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM