请问您可以告诉我最好的方法吗?我可以使用popen,但每次需要启动我的应用程序时,为参数创建一个大型缓冲区是很必要的。我可以使用fork + execv,但是然后程序写入标准输出,我无法读取输出(显示在文本字段中)是否还有其他解决方案?从gui前端启动控制台应用程序
回答
你能告诉我最好的方法吗?我可以使用popen,但每次需要启动我的应用程序时,为参数创建一个大型缓冲区是很必要的。
popen()
是一个很好的标准的方式,如果你只需要与孩子申请单向通信,就像写其stdin
或stdout
阅读,但不能同时使用。
使用C时,需要对字符串感到舒适。使用a string library for C来缓解字符串操作很有帮助,例如字符串连接,因为标准C库只提供基本的低级函数。
我可以用叉子+ execv,但随后的程序写入到stdout,我不能读取输出(在文本字段中显示它)
popen()
给你一个FILE*
指针孩子程序的stdout
,您可以使用标准CI/O功能fread()
或fscanf()
来读取其输出。再次,标准的C库has this functionality,并且它让你自己熟悉它。
有没有其他解决方案?
您可以让子程序写入一个文件然后读取该文件,但无论如何您需要能够构造命令行字符串并读取文件。
_您可以使子程序写入文件,然后读取该文件,但无论如何,您需要能够构建命令行字符串并读取文件._ - 这是一个完全半分的解决方案。 “其他”解决方案是实现'popen'的基本功能 - 创建一个'pipe(2)',做一个'fork(2)',然后在子节点上执行'dup2(2)'在stdout上,写入管道的末端,最后是'execve(2)'。 –
不知道是什么促使你的回应,我没有说不能做pipe-fork-exec。不过,您需要从'FILE *'或文件描述符中读取,这就是我能够读取文件的含义。 –
谢谢Blagovest,这正是我需要的。马克西姆,我的编是太小,不能链接任何库,除了libc。 –
- 1. .Net无法启动控制台的控制台应用程序
- 2. 在用户登录之前启动控制台应用程序
- 3. 如何从gui启动控制台程序?
- 4. 如何使用参数从终端启动控制台应用程序?
- 5. 从控制台应用程序启动ASP.NET Core 1应用程序
- 6. 从Mac OS X控制台启动iOS应用程序
- 7. 从MenuStrip启动控制台应用程序(Visual C#)
- 8. 控制台应用程序从ASP.NET Webform启动后崩溃
- 9. 如何在Linux中从终端启动控制台应用程序?
- 10. 从QProcess启动GUI应用程序
- 11. 启动后台Win32控制台应用程序
- 12. 在后台启动我的控制台应用程序
- 13. 如何从GUI应用程序向控制台应用程序发送命令
- 14. 从GUI开始并与控制台应用程序通信
- 15. 从控制台应用程序到Windows窗体GUI问题
- 16. 如何从Eclipse启动应用程序时启动java控制台?
- 17. 从其他控制台应用程序运行控制台应用程序
- 18. 从Windows控制台启动一个GUI程序,然后使其“脱离”本身
- 19. 无法使用xCode 4.4启动控制台应用程序
- 20. 从非控制台.NET应用程序内创建控制台
- 21. 从控制台应用程序
- 22. 从控制台到Web应用程序
- 23. 启动Windows控制台应用程序参数
- 24. 如何确定如何启动控制台应用程序?
- 25. 启动应用程序,并没有看到控制台
- 26. 启动单一的控制台应用程序
- 27. 在应用程序启动时最小化控制台C#
- 28. 添加清单后无法启动控制台应用程序
- 29. 重新启动一个java控制台应用程序代码
- 30. C#重新启动控制台应用程序
我很确定参数缓冲区的创建不是这样的性能瓶颈。 –
当然不是,但我的应用程序本身使用相当少量的内存和CPU。 –
您可以创建一个管道,并仍然使用fork-exec:http://stackoverflow.com/questions/5953386/writing-to-child-process-file-descriptor –