是STD ::系统或执行更好的练习
Is std::system or exec better practice?
我有一个程序,该程序调用了我制作的shell脚本工具,该工具通过目录并汇总文件并获取chardsum值并调用其他一些工具来上传文件。该操作大约需要3至4分钟。
我这样称呼脚本:
int result = system("/bin/sh /path/to/my/script");
我也通过使用exec()
功能系列获得了相同的结果:
int child = fork();
if(child == 0) {
execl( "/bin/sh", "sh", "/path/to/my/script", (char*)0 );
}
我知道使用exec
您可以将输出重定向到父程序,以便可以读取命令行工具的输出,但是除此之外,您什么时候应该使用system
而不是exec
?
暂时忽略system
的使用是可移植的,而使用exec
函数家族不可移植...
当您将exec
功能系列的使用与其他POSIX函数(例如pipe
,dup
,wait
(结合在一起时,您将获得更多控制如何在父过程和子过程之间传递数据的控制。
当您不需要任何这些控件时,即您只想执行命令,那么使用system
是优选的,IMO。
您的问题中的第一个system
调用将做同样的事情,您在下一个代码(fork and execl(中所做的事情
来自文档:
The system() library function uses fork(2) to create a child process
that executes the shell command specified in command using execl(3)
http://man7.org/linux/man-pages/man3/system.3.html
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 是STD ::系统或执行更好的练习
- 强制执行此模板的更好方法
- 执行调试日志记录的更好方法
- 执行直接指针操作还是 [] 更好
- 在 C++ 中执行此操作的视觉更好方法?标准::字符串
- 除了 setter 和 getter 之外的任何其他方法,它们将执行相同的功能但更好
- 有没有比迭代更好的方法在C++中执行URL模式匹配
- 在一定时间后停止程序执行的更好方法