1
A
回答
1
如果您的编译器支持popen()的某些变体,则可以相当容易地重定向输出。
注意事项:
- 下面的代码写在Windows中,它使用_popen(),而不是popen()。 * nix转换并不困难。
- 下面的代码没有错误处理。这只是为了说明这项技术。在生产中使用它之前,您必须添加错误检查。
- 这一切都在一个线程中运行。如果程序可能运行很长时间,则可能需要使用第二个线程在运行时读取其输出。
- 我认为popen()是POSIX,这意味着它可以在大多数* nix盒子上工作,但它不是标准C,所以不应该被认为是可移植的。
char *RunProg(const char *szCmdLine) { size_t nSize=512; size_t nUsed=0; char *szOut = malloc(nSize); FILE *fp = _popen(szCmdLine, "r"); char szBuff[128]; while(!feof(fp)) { if(fgets(szBuff, sizeof(szBuff), fp) != NULL) { nUsed += strlen(szBuff); if (nUsed >= nSize) { nSize += nUsed; szOut = realloc(szOut, nSize); } strcat(szOut, szBuff); } } _pclose(fp); return szOut; }
7
你不知道。不知道你在使用什么平台,而是看看popen
函数。您将以这种方式获得双向管道,您可以对其进行文件操作,例如阅读以获取字符串。
-1
最简单的解决方案可能是这样的:
system("ps-C nautilus > /tmp/data.txt");
然后打开该文件,并在内容中读取。
更新 显然你不会使用硬编码的文件名。在上面的代码中,我只是说明了这种技术。有很多方法可以确保您的文件名是唯一的。
相关问题
- 1. 返回的char *函数
- 2. 返回const char的函数*
- 3. R函数返回结果
- 4. 从函数返回结果
- 5. 函数不返回结果
- 6. 系统函数的返回值
- 7. 系统的返回值()函数
- 8. 将char *传递给函数将返回不同于传递char []的结果?
- 9. 奇怪的函数返回结果
- 10. openerp回显函数的返回结果
- 11. 从函数返回char *
- 12. 函数在PHP中不返回结果
- 13. 在C函数中返回char数组
- 14. 从函数返回结果 - JavaScript的
- 15. 函数不返回正确的结果
- 16. 笨函数的返回结果值
- 17. mysql函数的返回结果
- 18. 返回$ .getJSON函数的结果
- 19. 函数返回的查询结果
- 20. 函数返回不同的结果
- 21. TSQL函数从函数返回结果集中的行数
- 22. 将函数结果返回到数组
- 23. Strictfp返回在不同的系统不同的结果
- 24. 为什么此函数返回的结果比返回的结果要多?
- 25. 当函数返回结果,并在JavaScript中的函数
- 26. 更改返回结果的函数的返回类型
- 27. Dllimport函数返回结构
- 28. 检测系统的含义()函数的返回Linux中
- 29. 从函数返回char *的内容
- 30. 函数返回后char *值的变化
提问者可以用一个循环从中读取,直到它完成合并'popen',添加任何念给一个动态调整大小的字符串,并在年底转换回'字符*' 。然而这通常是一个冒险的主张;子进程的输出可能会消耗所有可用内存。 – crazyscot 2010-06-27 09:56:15
我偶然发现了一个朋友在发布这个答案之后几年前写过的便携式popen()类型的API,但我不确定他会对其授予什么授权条款。如果我可以与他联系,我会询问有关情况,并在此处更新源代码链接。这真的很光滑。 – jer 2010-06-27 14:57:54