私はLinux Cプログラミングには新しく、デバイスのパーティション情報を取得できるAPIはありますか?Linux Cプログラミング:デバイスのパーティション情報を取得するには?
答えて
私はそのAPIについて認識していません。
私はldd `which fdisk`
を実行しましたが、パーティションテーブルを読み取ることに関係するライブラリは表示されませんでした。
ソースコードを一目見てから、プログラムは外部ライブラリを使用していないことをさらに確信しています。
自分で物事を考え出すと、自分で学習に熱心している場合は、ここで私はあなたがするお勧め情報:
- はMBR上のWikipediaのページをお読みください。
fdisk
にソースを取得し、コードを読んでください。
(疑似)ファイル "/ proc/partitions"には、少なくとも物理デバイスで検出されたパーティションのリストが含まれています。残念ながら、パーティションタイプについては何も言いません(特に、パーティションが実際に拡張パーティションかどうかを推測する簡単な方法はありません)。 は、ここで私は私のマシンの/ procの/パーティションで見つけるものです:
major minor #blocks name
8 0 488386584 sda
8 1 13631488 sda1
8 2 237375488 sda2
8 3 1 sda3
8 4 3650560 sda4
8 5 3413781 sda5
8 6 29294496 sda6
8 7 14651248 sda7
8 8 9767488 sda8
8 9 176586448 sda9
8 16 7815168 sdb
8 17 7811136 sdb1
sdaが私のHDで、SDBはUSBドングルです。 sda3は拡張パーティションですが、ディスクのパーティションテーブルを直接読み取ることはできません。 このファイルに記載されている情報は、十分にあるかもしれません。 IMHOより安全な方法は次のとおりです。
1) Create a couple of pipes
2) fork a process an redirect the pipes to child's stdin and sdtout (fd 0 and 1)
3) execl "fdisk /dev/sdXXX"
4) send a "p\n" command to the child process
5) read the lines containg the complete partition information
私はこれがあなたにできることを願っています。
いくつかのパーティションパラメータについて多くの擬似ファイルがある場合は、/sys/block/sd?/
をご覧ください。
libblkidはすばらしいAPIです。 blkid(util-linuxパッケージにあります)はそれを使用しています。
blkidは、ラベル、ファイルシステムタイプ、およびUUIDとともにすべてのパーティションをリストします。ここに私のシステムの出力があります。
# blkid
/dev/sda1: LABEL="grub" UUID="a760119d-916a-492c-8ec1-50f81dbf4e26" TYPE="ext2"
/dev/sda3: LABEL="Library" UUID="248D72BD2E5CF009" TYPE="ntfs"
/dev/sda5: LABEL="WinXP" UUID="545CC7085CC6E438" TYPE="ntfs"
/dev/sda6: LABEL="Win7" UUID="22F009B2F0098CEB" TYPE="ntfs"
/dev/sda7: LABEL="Puppy" UUID="fe1dc425-ad17-4773-971a-435d91690883" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda8: LABEL="Linux Mint" UUID="0c61a114-9353-499b-a1cd-ba19722b1e43" TYPE="ext4"
/dev/sda9: LABEL="Ubuntu L" UUID="5f6923e1-92f4-4b3f-b613-9e78839e1987" TYPE="ext4"
/dev/loop0: TYPE="squashfs"
/dev/loop1: UUID="16e3a75d-74dc-4391-a9e2-4305c08c5707" TYPE="ext3"
/dev/loop4: TYPE="squashfs"
#
ここでは、リファレンスマニュアルです:http://www.kernel.org/pub/linux/utils/util-linux/v2.21/libblkid-docs/
私はちょうど今、自分が同じ質問に対する答えを探して、このライブラリを見つけました。
Akash Rawalの回答はかなり近いです。良い方法はlibblkidを使うことです。
これは、パーティションのuuidを取得する例です。Using libblkid to find UUID of a partition。
私は上記のコードとlibblkidの参照メニューの例を組み合わせて、作業プログラムの下に生成します。
#include <stdio.h>
#include <string.h>
#include <err.h>
#include <blkid/blkid.h>
int main (int argc, char *argv[]) {
blkid_probe pr = blkid_new_probe_from_filename(argv[1]);
if (!pr) {
err(1, "Failed to open %s", argv[1]);
}
// Get number of partitions
blkid_partlist ls;
int nparts, i;
ls = blkid_probe_get_partitions(pr);
nparts = blkid_partlist_numof_partitions(ls);
printf("Number of partitions:%d\n", nparts);
if (nparts <= 0){
printf("Please enter correct device name! e.g. \"/dev/sdc\"\n");
return;
}
// Get UUID, label and type
const char *uuid;
const char *label;
const char *type;
for (i = 0; i < nparts; i++) {
char dev_name[20];
sprintf(dev_name, "%s%d", argv[1], (i+1));
pr = blkid_new_probe_from_filename(dev_name);
blkid_do_probe(pr);
blkid_probe_lookup_value(pr, "UUID", &uuid, NULL);
blkid_probe_lookup_value(pr, "LABEL", &label, NULL);
blkid_probe_lookup_value(pr, "TYPE", &type, NULL);
printf("Name=%s, UUID=%s, LABEL=%s, TYPE=%s\n", dev_name, uuid, label, type);
}
blkid_free_probe(pr);
return 0;
}
使用法:
gcc -o getuuid getuuid.c -lblkid
sudo ./getuuid /dev/sdc
Number of partitions:1
Name=/dev/sdc1, UUID=754A-CE25, LABEL=KINGSTON, TYPE=vfat
- 1. Pythonで各パーティションの情報を取得
- 2. デバイスにアプリケーション情報を取得する
- 3. Cocoa touch - 取得デバイス情報
- 4. デバイスの情報の保存と取得
- 5. カーネルクラッシュ後のLinuxカーネルデバッグ情報の取得
- 6. デバイスのネットワーク情報を取得する方法は? (Android)
- 7. Linuxのプロセスに関する情報の取得
- 8. デバイス情報を取得するためのCisco ISE REST API
- 9. NTFSパーティション内のファイルのセキュリティ情報を取得および設定するには?
- 10. j2meでデバイス情報をプログラムで取得する
- 11. 取得情報
- 12. Linuxモノアセンブリでfile + line infoデバッグ情報を取得する方法
- 13. マウントしないでデバイス情報をブロックする(Linuxの場合)
- 14. Cでプロセスメモリ情報を取得
- 15. のC#、エクセル:取得範囲情報
- 16. Chromeはデバイスの向き情報をどのように取得しますか?
- 17. C#:ドメイン内のコンピュータに関する情報を取得
- 18. Linuxの現在のディレクトリにあるファイルの情報を取得する方法
- 19. Safariウェブブラウザを使用したipadデバイス情報の取得
- 20. Androidデバイス情報
- 21. アセンブリに関する情報を取得
- 22. C#DLLアセンブリ情報を取得する方法は?
- 23. DIMMとCPUソケットの情報を取得
- 24. LinuxでROMメモリの種類とサイズに関する情報を取得
- 25. CでLinuxのメモリマップ情報を表示する方法は?
- 26. PyWin32ネットワーク情報/統計情報を取得する
- 27. C#後ろの形の情報を取得する
- 28. タグ間の情報を取得する
- 29. facebook friendの情報を取得する
- 30. カレンダーのイベントエントリ情報を取得する
をあなたが与えられたブロックで利用可能なパーティションのリストを取得したいですデバイス(おそらく物理ディスク)? –
http://stackoverflow.com/questions/5288034/how-get-uuid-of-a-device-partition-in-linux-programatically –
@Brian Cain はい、重複している可能性があります。 – bright