【发布时间】:2012-02-14 11:53:49
【问题描述】:
我正在 Linux 中开发 Qt 应用程序。我想将 Linux 命令传递给终端。这行得通,但现在我也想从终端获得此特定命令的响应。
例如,
ls -a
如您所知,此命令列出当前工作目录的目录和文件。我现在想将 ls 调用的返回值传递给我的应用程序。这样做的正确方法是什么?
【问题讨论】:
-
您可以在
QProcesshere找到工作示例。
我正在 Linux 中开发 Qt 应用程序。我想将 Linux 命令传递给终端。这行得通,但现在我也想从终端获得此特定命令的响应。
例如,
ls -a
如您所知,此命令列出当前工作目录的目录和文件。我现在想将 ls 调用的返回值传递给我的应用程序。这样做的正确方法是什么?
【问题讨论】:
QProcesshere找到工作示例。
QProcess 是 qt 类,它可以让你生成一个进程并读取结果。有一个在该页面上读取命令结果的用法示例。
【讨论】:
ls -a 在我见过的任何 Linux 系统上都不存在。程序是ls,-a是一个参数。
popen(),linux systerm的api,返回FILE *,你可以像文件描述符一样读取它,也许对你有帮助。
【讨论】:
解析ls(1) 输出是危险的——在目录中创建一些具有有趣名称的文件并进行测试:
touch "one file"
touch "`printf "\x0a\x0a\x0ahello\x0a world"`"
这会在当前工作目录中创建 两个 文件。我希望您解析ls(1) 输出的尝试不会奏效。如果您将结果显示给人类,这可能没问题,(尽管如果文件名包含看起来像ls(1) 输出的输出,人类会非常困惑!)但是如果你是试图在文件系统中呈现类似explorer.exe 或Finder.app 表示文件的东西,这是严重损坏。
改为使用opendir(3)、readdir(3) 和closedir(3) 自行读取目录条目。这将更安全、更便携,并且(作为附带好处)性能稍好。
【讨论】: