%20-%20%E5%A5%87%E5%A6%99%E3%81%AA%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%97.png)
私のC ++アプリケーションでは、サムドライブのファイルシステムの種類を確認する必要があります。新しいパーティションをインストールする前にこれを行う必要があります。私もsystem()
関数を呼び出したくありません。次のテストコードを試しました。
#include <blkid/blkid.h>
#include <stdio.h>
int main()
{
blkid_probe pr;
const char *ptname;
const char* devname = "/dev/sdb1";
pr = blkid_new_probe_from_filename(devname);
if (!pr)
printf("faild to open device\n");
else
{
blkid_probe_enable_partitions(pr, true);
blkid_do_fullprobe(pr);
blkid_probe_lookup_value(pr, "PTTYPE", &ptname, NULL);
printf("%s partition type detected\n", ptname);
blkid_free_probe(pr);
}
}
このコードを使用してサムドライブを挿入すると、ntfs
私のパーティションはdosとして表示されます。サムドライブを挿入するか、fat
コードext4
から奇妙な文字列を返しますが、両方のファイルシステムで同じです
AWAVI��AUATL�%�
。
これらの奇妙な出力の原因は何ですか?ファイルシステムをチェックするより良い方法がありますか?助けてくれてありがとう。
答え1
どのファイルシステムかを知りたい場合は、まずそのファイルシステムがaであることを確認してから、次を使用してファイルシステムの種類を調べる必要がありますsdb1
。USAGE
filesystem
TYPE
ファイルシステム検索を有効にするには、次のフラグを設定する必要があります。
blkid_probe_set_superblocks_flags(probe, BLKID_SUBLKS_USAGE | BLKID_SUBLKS_TYPE |
BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_BADCSUM);
結果に関して初期化されていない戻り値を確認する(または最初に使用する必要がある)ため、blkid_probe_lookup_value
照会が失敗するとゴミが発生します。そしてパーティションに。blkid_probe_has_value
ptname
NULL
PTTYPE
PTTYPE
使用法と種類を含むバージョンは次のとおりです。
#include <blkid/blkid.h>
#include <stdio.h>
#include <string.h>
int main()
{
blkid_probe pr;
const char *value = NULL;
const char* devname = "/dev/sdb1";
int ret = 0;
pr = blkid_new_probe_from_filename(devname);
if (!pr)
printf("faild to open device\n");
else
{
blkid_probe_enable_partitions(pr, 1);
blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_USAGE | BLKID_SUBLKS_TYPE |
BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_BADCSUM);
blkid_do_fullprobe(pr);
ret = blkid_probe_lookup_value(pr, "USAGE", &value, NULL);
if (ret != 0) {
printf("lookup failed\n");
return 1;
} else
printf("usage: %s\n", value);
if (strcmp(value, "filesystem") != 0) {
printf("not filesystem\n");
return 1;
}
ret = blkid_probe_lookup_value(pr, "TYPE", &value, NULL);
if (ret != 0) {
printf("lookup failed\n");
return 1;
} else
printf("type: %s\n", value);
blkid_free_probe(pr);
}
}