2016-10-15 5 views
1

文字列のmd5sumの出力を標準出力に保存するために、execlp()を使用してプログラムを作成しようとしています。基本的には、これをシミュレートします。この出力を取得echolとmd5sumを含むExeclp

echo "Hello!" | md5sum 

:この方法でexeclp()を使用して、けれども

char string[] = "Hello!"; 
execlp("md5sum", "md5sum", string, NULL); 

を:ここで

31ebdfce8b77ac49d7f5506dd1495830 - 

が、私はこれを理解するために最初にしようとしたものです引数は文字列ではなくファイルであると想定しています。だから、私はこれを試した:

しかし、これはHello! md5sumの出力を生成します。システムコールではなく、"md5sum"を文字列として認識します。

echoとmd5sumを連携させるにはどうすればよいですか?または、md5sumをファイルではなく文字列で動作させるにはどうすればよいですか?おそらく、私はexeclp()以外の機能を使用していますか?

+1

ジョブを実行するにはpipe、fork、およびexeclpが必要です。 –

+0

md5sumは文字列を取らず、ファイルを取ります。 – Schwern

+0

'md5sum'は明らかに' stdin'から読み込むことができます。 @JonathanLefflerの提案で行く – alvits

答えて

0

私があなたの質問に答える前に、いくつかの懸念事項があります。

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)); 
} 
関連する問題