• ベストアンサー

コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法

はじめまして。 Linux(ディストリビューションは問わず)で コマンド(例えばlsコマンド)を実行して その出力結果を文字列で取得するプログラムを作成したいです。 コマンドの実行はsystem()で可能なのかな?と思っていますが、 コンソールに出力される内容はどのように取得して良いのか分かりません。 詳しい方がおりましたらご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

popen/pclose を使います。 --- char buff[1024]; FILE *fp = popen("ls", "r"); while (fgets(buff, sizeof(buff), fp)) { printf("fgets: %s", str); } pclose(fp); --- こんな感じ。 popen は、入力と出力のどちらか一方しか制御できませんので、入出力の両方を処理したい場合は、 ・まじめにやる場合: 入力用・出力用、2本 pipe をつくり、それを標準入出力に dup してからfork&exec ・手をぬく場合: どちらかはANo.1のようなリダイレクトで処理。 という処理をすることになります。

goopon
質問者

お礼

今回は、このとおりで対応したいと思います。 助かりました。ありがとうございます。 色々方法があって、もっと詳しく勉強しないとと思いました。

その他の回答 (2)

回答No.2

teeコマンドを使う手も!! system("ls -ltr /etc/hosts > | tee /DIR/HOSTS_LIST"); こんな感じで/etc/hostsファイルを/DIR/HOSTS_LISTファイルに出力すると思います。

回答No.1

system("ls -ltr /etc/hosts > /DIR/HOSTS_LIST"); こんな感じで/etc/hostsファイルを/DIR/HOSTS_LISTファイルに出力すると思います。

goopon
質問者

お礼

早速ありがとうございます。 試してみたいと思います。

関連するQ&A

  • DOSコマンドで結果として出力される文字列を変数に格納したい

    DOSコマンドで、あるソフト(タスク)が実行されていればプログラムAを、そうでなければプログラムBを実行するバッチを組んでいます。タスクの一覧はtasklistで取得できることが分かり、対象となるタスクおみを抽出する方法も分かりました。しかし、この後どうすれば良いかが分かりません。対象となるタスクが存在した場合としない場合では出力される文字列が違います。この文字列を比較することで分岐が実現できると思ったのですが、それには文字列を変数に格納する必要があります。以下のように記述し、うまくいくことを期待したのですが、駄目でした。 set STATUS=tasklist /fi "Imagename eq タスク名" tasklist /fi "Imagename eq タスク名"の部分が関数であれば、戻り値があってそれを格納することができるのではないかと思ったのですが、できませんでした。このケースに限ったことではありませんが、各コマンドの実行結果として出力される文字列を変数に格納するにはどうすれば良いのでしょうか?VBSやWSHなどではなく、.bat形式の場合でお願いします。

  • コマンドを実行してコマンドライン文字列を読み込む

    C言語(他の言語でも)で、コマンドを実行して結果の文字列を取得できるような関数はないでしょうか? コマンドを実行したプログラム内の変数に文字列として保持して、処理したいと考えています。 Windowsです。 よろしくお願い致します。

  • meadow で ls をすると1列に出力される

    Meadow3でシェルを起動して、lsコマンド(オプションなし)をすると、1列で出力が表示されます(" ls -1 " とした感じ)。これは、何が原因なのでしょうか? ちなみに、cygwinでは、通常のように出力されます。

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

  • 【DOSコマンド】一致した文字列の次の単語を出力

    コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを検索し、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、abcdefgを出力したいです。 hogehogeは大文字小文字入り交じっています。

  • コマンドプロンプトでDOSプログラムの文字が表示されない

    XPのコマンドプロンプトで、MS-DOS用プログラムを実行すると、文字が表示されないことがあります。(空行が何行か出てきます) 例えばこのソフトです:http://www.vector.co.jp/soft/dos/util/se004775.html このソフトを実行して文字が表示されなくてもタイムスタンプは変わっていますし、出力をリダイレクトするとファイルに文字が出力されているので、プログラム自体は動作しています。 なお、Win32コンソールアプリの表示は正常です。 これが仕様なのでしょうか。それとも、何か表示する方法があるのでしょうか。

  • ls -l コマンドの結果から月の値だけを取りだしたい

    皆さん、お手数ですが教えて下さい。 今Linux上で動作させるC言語のプログラミング作業を行っているのですが、その過程において以下のコマンドラインから”月”の数値を取り出したいと思っています。 (sprintfで編集したコマンドをsystemコマンドで。) > ls -l test_11.c -rw-rw-r-- 1 user1 group 5431 9月 25 18:02 test_11.c 以上の表示結果から、lsコマンドとawkコマンドを組み合わせて、月の数値を取り出したいのですが、 この例で言うと、月の部分には”9月”と全角の「月」という文字が付いてきます。 取り出したいのは「9」の値だけなのです。 上手くこの月の数値だけを取り出すオプションとか無いでしょうか? もちろん、複数のコマンドをパイプで繋げるのは一向に構いません。 よろしくお願いいたします。

  • プリンタへ文字列の出力方法について

    1、改行コード「\r\n」を含む文字列を取得 2、「印刷」コモンダイアログを呼出す。 3、TextOut()関数で出力する。 すると、改行されずに「・・」と文字化けされて出力される。 どうやらTextOut()関数では、改行コードがサポートされていない様でした。 そこで、質問です。 改行コードを含む文字列を、改行して出力する方法はないでしょうか? TextOut()関数で出力するには、 改行を含む文字列を、改行を含まない文字列に分けるしかないですよね? 良い方法がないかな?と思い質問させて頂きました。 #Win98、VC++、SDKで作成しています。

  • たくさんのファイルから文字列を検索するコマンド

    例えば、サーバーのホームディレクトリ内にある たくさんのファイルの中から、電話番号などの文字列を 検索するには、どんなコマンドを実行すればいいのでしょうか? Linux / Unix です。

  • bshでのls結果出力内容が途中で途切れる

    初めて質問いたします。 皆さま、どうぞ宜しくお願い致します。 OSはHP-UXで、とあるディレクトリ配下の ls 結果をリダイレクトでファイルに出力させるbshでの話です。 この出力結果ファイルですが、ls -lR で指定したディレクトリ配下すべてを出力する時と、途中までのみ出力される現象が発生しました。 ●シェルのログファイルでは、lsコマンドの実行結果(戻り値)はいずれもゼロ(正常) ●シェルをキックした際、終了すると画面には何らかのメッセージ出力なくプロンプトが表示 ●同じコマンドを手で発行した場合、ファイルには常にls結果が全出力される ●シェルはrootでキック ●ls対象ディレクトリ、ファイルのオーナーはrootではない ●ls対象ディレクトリ、ファイルのパーミッションは全て755 ●ls結果ファイルの出力先ディレクトリのディスク残容量は約32G ●ls結果ファイルのサイズは、全て漏れなく出力された場合は約19M、途中まで出力の場合は約4M 私自身、SHELLの経験値が浅く、基礎的な話でしたらお恥ずかしい限りです。 周囲の経験者の方々にも伺いましたが、私の説明不備でしょうか、解答がみつかりません。 こちらに既存で類似質問がなく、WEBで調べましたがわからず質問させて頂きました。 実は、本日(6/2)の昼過ぎに取引先へ原因報告を求められ、焦っております。 以上の様な状況です。 ご経験のおありな方をはじめ皆さま、どうか御教示ください。 宜しくお願い致します。