2011-07-19 10 views

答えて

12

マニュアルは見た目ほど簡単です。プローブ構造を作成し、初期化し、情報を求めてから解放します。最初の2つのステップを1つにまとめることができます。

#include <stdio.h> 
#include <stdlib.h> 
#include <err.h> 
#include <blkid/blkid.h> 

int main (int argc, char *argv[]) { 
    blkid_probe pr; 
    const char *uuid; 

    if (argc != 2) { 
    fprintf(stderr, "Usage: %s devname\n", argv[0]); 
    exit(1); 
    } 

    pr = blkid_new_probe_from_filename(argv[1]); 
    if (!pr) { 
    err(2, "Failed to open %s", argv[1]); 
    } 

    blkid_do_probe(pr); 
    blkid_probe_lookup_value(pr, "UUID", &uuid, NULL); 

    printf("UUID=%s\n", uuid); 

    blkid_free_probe(pr); 

    return 0; 
} 

blkid_probe_lookup_valueセットuuid引数の型const char *である理由であるpr構造に属し、文字列を指すように:これは、作業プログラムです。必要な場合は、自分で管理するchar *にコピーすることができますが、それは不要です。printfに渡すだけです。 blkid_probe_lookup_valueの4番目の引数を使用すると、必要に応じて戻り値の長さを取得できます。 blkid_do_probeblkid_do_safeprobeblkid_do_fullprobeの間には微妙な違いがありますが、デバイスに既知のファイルシステムがあり、UUIDを取り出したい場合は、blkid_do_probeの最初の結果を参考にしてください。

+0

この例では、パーティションを引数として入力する必要がありますか? ROOTパーティションのUUIDを確認するにはどうすればよいですか? – HighLife

+0

"ROOTパーティション"を定義します。デバイスは '/'にマウントされていますか? – hobbs

+0

はい/ – HighLife

4

まず、rootとしてマウントされているデバイスを探す必要があります。 man getmntent(3)を参照してください。デバイスを知ったら、hobbsの説明に従ってblkid_new_probe_from_filenameを使用します。

#include <stdio.h> 
#include <mntent.h> 

int main() { 
    FILE* fstab = setmntent("/etc/mtab", "r"); 
    struct mntent *e; 
    const char *devname = NULL; 
    while ((e = getmntent(fstab))) { 
     if (strcmp("/", e->mnt_dir) == 0) { 
      devname = e->mnt_fsname; 
      break; 
     } 
    } 
    printf("root devname is %s\n", devname); 
    endmntent(fstab); 
    return 0; 
} 
+0

これはとても役に立ちます。私はhobbsの投稿と組み合わせて何が起こるかを見ていきます。どうも – HighLife

関連する問題