私があなたの質問に答える前に、いくつかの懸念事項があります。
MD5は壊れてから長く長く、長いです。特定のMD5の合計を持つファイルを作成することはかなり簡単です。 SHA1が出ています。 SHA-256以上を使用してください。あなたのアプリケーションがセキュリティに関するものではない場合、あなたと私は攻撃面についての決定を行う資格がないため、危険を冒さないでください。
Cでチェックサムを実行することを検討しましたか?より速く、より移植性が高く、より信頼性の高いものになります。 any number of checksum librariesがあります。 Gnome Lib provides checksumsなどです。
#include <stdio.h>
#include <glib.h>
int main() {
char string[] = "Hello!";
printf("checksum for %s is %s\n",
string,
g_compute_checksum_for_string(G_CHECKSUM_SHA256, string, -1)
);
}
[OK]をクリックします。
最初の問題はmd5sum
です。文字列を受け取らないため、ファイルを取ります。これはexeclp
とは何の関係もなく、md5sumプログラムの仕組みです。 stdinからmd5sumを読み込めるようにすることができますが、それにはパイプが関係しており、より多くのものを取りたいと思います。私は図書館の利用について言及しましたか?
これは、エラーチェックの2番目の問題につながります。私は何も見ません。 exec
のエラーチェックはexecの直後に行われます。それが成功した場合、呼び出しプログラムは直ちに終了します。
問題はexeclp
です。実行しているプログラムの名前を変更している場合を除き、おそらく過剰です。 execvp
を使用してください。私はそれが好きです。なぜなら、すべてのプログラムの引数を後でエラーチェックに使用できる素敵なリストにまとめておくからです。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
int main() {
char *args[] = { "md5um", "Hello!", NULL };
int exit_status = execvp(args[0], args);
fprintf(stderr, "executing %s ", args[0]);
for(int i = 1; args[i] != NULL; i++) {
fprintf(stderr, "%s ", args[i]);
}
fprintf(stderr, "exited with %d: %s\n", exit_status, strerror(errno));
}
ジョブを実行するにはpipe、fork、およびexeclpが必要です。 –
md5sumは文字列を取らず、ファイルを取ります。 – Schwern
'md5sum'は明らかに' stdin'から読み込むことができます。 @JonathanLefflerの提案で行く – alvits