- ベストアンサー
perlでc言語の実行処理を行いたい
perlでcのプログラム処理を行いたいのですが可能でしょうか。 内容としては、 複数のファイルをcのプログラムによって別のファイルにアウトプットする形にしたいと思っております。 よろしくお願いします。
- みんなの回答 (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
その他の回答 (2)
- _--_1l1_1_
- ベストアンサー率67% (102/152)
表示がくずれるので、空白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
お礼
こういった使い方もできるのですね! ありがとうございます!
- Tacosan
- ベストアンサー率23% (3656/15482)
なにをしたいのかよくわからんのだけど, たんに「別のプログラムを実行したい」というだけ? もしそうなら system とか open とかかな.
お礼
ありがとうございます! 質問の内容をどう書いて良いのか分からず、あせっていたもので… 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以上あるファイル一つ一つ実行していくのはとても効率が悪いのでどうしたら良いのか分からないので質問させていただきました。 わかりにくくて申し訳ありません。
お礼
詳しい回答ありがとうございます。 参考にしてみます。