1

OS X 10.6.8、Carbon、C++ アプリ。

シェルからコマンドを実行し、結果を文字列として取得して、別の関数のパラメーターとして使用したいと考えています。

df / | tail -n +2 | awk '{ print $1 }'

しかし、カーボン、C++ に相当する NSTask は見当たりません。私が見つけることができる限り、NSTask を使用するには Objective-C を使用する必要があります。

Boostにも何か提供できるものがあるとは思いません。

誰かが私を正しい方向に向けることができますか?

編集: UNIX 時代を思い出そうとするとpopen、読み取りモードで使用して、ファイル ポインターから必要な結果を取得するのはどうですか?

4

1 に答える 1

1

もちろん、次のように書くこともできます。

int myPipe[2];
int err = pipe(&myPipe); // write to myPipe[1] in child, read from myPipe[0] in parent

int child_pid = fork();
if(child_pid == 0)
{
    err = dup2(myPipe[1], 1); // redirect standard output to the input of the pipe
    execl("/path/to/program", "arg1", "arg2");
}

int pipefd = myPipe[0];
char buffer[255];
err = read(pipefd, buffer, 255);

いくつかのチェックを追加して、子プロセスを待つことを忘れないでください。

ただし、Cocoa を使用できるが、C++ と Objective-C コードを結合する方法がわからない場合は、Objective-C++ を使用してコードを拡張子 .mm のファイルに配置します。

于 2013-03-28T09:44:04.107 に答える