2012-04-29 4 views
0

マウントされているすべてのCDROMにアクセスして何らかのアクションを実行するLinux上のC言語で関数を書く必要があります。私はLinuxはCコードからすべてのマウントされたCDROMを見つける

count = getmntinfo(&buf, 0); 

を使用して、すべてのデバイス上でループして

buf[i].f_type == 17 

をチェックBSDでそれを行うことができます
は、Linux上で同じことを行うにはどのような方法か?

+2

CD-ROMの定義は何ですか? DVD-ROMまたはBD-ROMはカウントされますか?上のいずれかのマウントされたISOイメージはどうでしょうか? – NPE

+0

すべてのデバイス。 –

答えて

2

おそらく、最も良い方法は/ proc/mountsを解析することです。これは/ etc/mtabと同じように見えますが、実際にはディスク上のファイルではなく、カーネルインターフェースです。 )などです。実質的には、cdromをマウントするすべてのLinuxシステムにはprocがあり、その多く(マウントを含む)には特権を必要としません。

libudevが、私は解決策は、多くの複雑になります考えるもあります:

再び

http://www.freedesktop.org/software/systemd/libudev/

、私は思うものの、事実上のCDをマウントするすべてのLinuxシステムでも、udevを使用しますが、これはprocのためになるだろう少し不実です。

/sys/devには、マウントされた各デバイスに関する詳細情報が含まれています。 libudevはこれらのパスを使います。

本当にユーザーを尊重するために、私は/ dev/dvdrwなどの従来のシンボリックリンクを試してみるべきだと思います。それはそれらのリンクのためのものです。また、仕事をはるかに簡単にします。

+0

また、デバイスがCDROMであるかどうかを確認する方法はありますか? –

+1

ファイルシステムが 'udf'か' iso9660'であることを確認しますか?それが私の心に来る唯一のものです。 – Artefact2

+0

また、/ devの名前はhttp://ftp.osuosl.org/pub/linux/docs/device-list/devices-2.6+.txtというシステムに従いますが、これはあくまでも一例ではありません。 udevは "devtype"という文字列を持っているようですが、/ proc/mounts(つまり、parse/proc/mountsと合理的なcantidatesを試してください)と一緒に調べてみてください。 libudevは/ sys/devパスを使います。上記の私の編集を参照してください。 – delicateLatticeworkFever

関連する問題