私はC でQuineを作成しています。新しい C ファイルを作成し、コンパイルして実行する必要があります。
なぜ機能しないのかを理解するために、簡単なスニペットを作成しました。
私の推測では、execv
fprintf の書き込みが完了する前にコマンドを開始すると思いますが、私はスリープ状態にしましたが、それも機能していませんでした。
(この醜いコードについては申し訳ありませんが、それが目的ではありません)
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
char *cmd[100]= {"sh", "-c", "\"gcc tmp.c && ./a.out\""};
fprintf(fopen("tmp.c", "w"), "#include <stdio.h>\nint main(){puts(\"Hello World\");}");
execv("/bin/sh", cmd);
return (0);
}
出力
sh: gcc tmp.c && ./a.out: No such file or directory
何か案が ?