プロが教える店舗&オフィスのセキュリティ対策術

ファイルの入出力について勉強しています。
あるプログラムを実行した時に表示される標準出力に表示された内容のコピーの仕方についての質問です。例として、
例)
gcc hello.c
./a.out
hello

最後の hello をコピーしてhello.cのファイル(ソースコード)内にコメントとして記録できるようにしたいのです。
あるファイルの内容をコピーして他のファイルに上書きはできたのですが、標準出力に表示される内容のコピーの仕方がわからないのでヒントをいただけると助かります。

質問者からの補足コメント

  • うーん・・・

    <hello.c>
    #include <stdio.h>
    int main(void)
    {
    printf("hello\n");
    FILE *file;
    file = fopen("write.c","a+");
    fprintf(file,"/*---*/");
    fclose(file);
    return 0;
    }

    7行目のfprintf(file,"/*---*/");に標準出力に表示されたhelloをコピーしてプログラムの最後に/*hello*/が入力されるようにしたいです。

      補足日時:2021/04/13 10:57
  • 実行結果として以下の様に、実行された結果がコメントとして書き込まれていくプログラムにしたいのです。
    /**/内が、様々な表示になるプログラムの時に標準出力で表示される内容をコピーしてコメントが追記される様な形

    #include <stdio.h>

    int main(void)
    {
    FILE *file;
    file = fopen("write.c","a+");
    fprintf(file,"/*----*/\n"); /**/内は実行結果が入る
    fclose(file);
    return 0;
    }
    /*Error*/
    /*Correct*/
    /*Incorrect*/
    /*Error*/
    .......

      補足日時:2021/04/13 11:23

A 回答 (5件)

改行は気にしないことにして「ふつう」のシェルなら


(echo "/* "; ./a.out; echo " */") >> hoge.c
でいける.
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。
参考になりました。

お礼日時:2021/04/13 18:29

案1) 標準出力に tee を噛ませる


gcc hello.c
echo "/* " $(./a.out) " */" | tee -a hello.c

案2) 専用プログラムを別途用意して噛ませる
gcc -o append append.c
gcc hello.c
./a.out | ./append hello.c

// append.c
void main(int argc, char** argv) {
_ FILE* fo = fopen(argv[1], "a+");
_ char c = getchar();
_ fprintf(fo, "/*");
_ while (c != EOF) { putchar(c); fputc(c, fo); c = getchar(); }
_ fprintf(fo, "*/");
_ fclose(fo);
}
    • good
    • 0
この回答へのお礼

助かりました

2通りもありがとうございます。
参考にして勉強させて頂きます。

お礼日時:2021/04/13 18:29

そんな事しなくても自分で書けば良いのでは?



<hello.c>
#include <stdio.h>
int main(void)
{
printf("hello\n"); // hello
return 0;
}

これだけですよ
    • good
    • 0
この回答へのお礼

コメントありがとうございます。
そうすれば簡単なのはわかるんですが、勉強としてどういう風にすれば標準出力に表示された文字をファイルに書き込めるかわかりたいのです。
質問に補足で、
file = fopen("write.c","a+");
fprintf(file,"/*---*/");

/*---*/の部分に標準出力に表示された内容を入れて、実行するたびにプログラムに書き込みをする様にしたいのです。

お礼日時:2021/04/13 11:13

コメント形式に成型するのは手間だが、



シェルスクリプトで標準出力をファイルに追加でリダイレクト。


リダイレクトでファイルへ出力するときに追加書き込みを行う
https://www.javadrive.jp/command/redirect/index2 …
    • good
    • 0

出力されたものをコピーするんじゃなくて出力される変数の中身を書き込めば良い

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!