• ベストアンサー

perlでc言語の実行処理を行いたい

perlでcのプログラム処理を行いたいのですが可能でしょうか。 内容としては、 複数のファイルをcのプログラムによって別のファイルにアウトプットする形にしたいと思っております。 よろしくお願いします。

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

  • ベストアンサー
  • N60-BASIC
  • ベストアンサー率80% (17/21)
回答No.3

ファイル名や引数に法則性があればファイル一覧の取得などで簡便に書ける可能性もありますが、詳細が不明なのでとりあえず力技で。 use strict; use warnings; while(<DATA>) { chomp; my($filename, $p) = split /\s+/; system("./a.out -P $p -i ${filename}.wav -o ${filename}.cep"); } exit; __DATA__ test1_1 256 test2_1 500

kakarin1217
質問者

お礼

詳しい回答ありがとうございます。 参考にしてみます。

その他の回答 (2)

回答No.2

表示がくずれるので、空白2文字を全角空白にしていることに注意。 #!/usr/bin/perl use strict; use warnings; use Inline C => 'DATA'; if ($#ARGV < 0) {   $ARGV[0] = $0; } cat(@ARGV); __DATA__ __C__ #include <stdio.h> #include <stdlib.h> void cat(SV* name1, ...) {   Inline_Stack_Vars;   int i;   FILE *fp;   char *file;   char ch;   for (i = 0; i < Inline_Stack_Items; i++) {     file = SvPV(Inline_Stack_Item(i), PL_na);     fp = fopen(file, "r");     if (fp == NULL) {       fprintf(stderr, "file open error %s\n", file);     }     else {       while (1) {         ch = fgetc(fp);         if (ch == EOF) {           break;         }         putc(ch, stdout);       }       fclose(fp);     }   }   Inline_Stack_Void; } --- $ cat tmp1.txt A B C $ cat tmp2.txt D E F $ perl -w Inline-C.pl tmp1.txt tmp2.txt A B C D E F

kakarin1217
質問者

お礼

こういった使い方もできるのですね! ありがとうございます!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なにをしたいのかよくわからんのだけど, たんに「別のプログラムを実行したい」というだけ? もしそうなら system とか open とかかな.

kakarin1217
質問者

お礼

ありがとうございます! 質問の内容をどう書いて良いのか分からず、あせっていたもので… Cのプログラムを実行するときにオプションをつけて実行するのですが、 そのオプションの値を変えて複数のファイルを1つずつ実行していきたいと思っています。 ./a.out -P 256 -i test1_1.wav -o test1_1.cep ./a.out -P 500 -i test2_1.wav -o test2_1.cep のような作業を100以上あるファイル一つ一つ実行していくのはとても効率が悪いのでどうしたら良いのか分からないので質問させていただきました。 わかりにくくて申し訳ありません。

関連するQ&A