I am writing (yet another) file manager (to learn stuff:) and have a silly/stupid block.
On Linux, to enumerate the storage devices which can contain files, I believe the best approach is to parse the contents of the /proc/partitions file and extract the /dev/sda* entries. (right?) However, how can I map the /dev/sda* to something that I can explore programmatically to get directory contents? I am planning on using boost/filesystem, but since I cannot ls /dev/sda I assume I cannot use boost to iterate over it.
Synopsis: how can I convert /dev/sda* to something that I can ‘ls’
I think you’re mis-understanding exactly what
/dev/sd*actually are to a program. They are devices not directories. You use themountcommand to tell the operating system to “interpret” the device as a filesystem, and to attach it somewhere (root, or otherwise). It’s this step that makes it into “a directory” somewhere on your filesystem. So other than raw I/O commands (which you don’t want to do), get the filesystem mounted, and THEN try and explore it.It’s kind of like opening a file really. When you do this, the operating system gives your program a stream of bytes that you can randomly access the file through. But on the disk, that file could actually be scattered all over the hard drive (or whatever device). But the OS is “making” it into a “nice” format for you to deal with transparently. The same is true of the disk itself when accessing directory/file listings.
I hope my example made it clearer as to why what you’re trying to do isn’t as simple as you think it is.