开发者

Copying devices in Linux

I am work开发者_Go百科ing at an OS independent file manager, in C. I managed to copy files, links and directories, but I am not sure how to copy devices. I would appreciate any help.


To create a device file, use the mknod(2) syscall. The struct stat structure will give you the major and minor device numbers for an existing device in st_rdev.

Having said that, there is little value in "copying" a device because a device doesn't contain anything useful. The major and minor numbers are specific to the OS on which they exist.


It's not really a useful feature, IMHO. tar(1) needs to be able to do it as part of backing up a system, and setup programs need to be able to create them for you when setting up your system, but few people need to deal directly with device files these days.

Also, modern Linux systems are going to dynamic device files, created on the fly. You plug in a device and the device files appear; you unplug it and they disappear. There is really no use in being able to copy these dynamic files.


dd is your friend (man dd)

dd if=/dev/sda1 of=/some_file_or_equally_sized_partition bs=8192

if you want to copy the device-file itself, do this:

cp -p device-filename   new-filename

e.g.:

cp -p /dev/sda1   /tmp/sda1

those are both equivalent device files, and can be used to access the device.

If you're want to do this from C, use mknod() .. see "man 2 mknod"


This might be useful

cp -dpR devices /destination_directory

cp -dpR console /mnt/dev


You don't. Just filter them out of the view such that it can't be done.

Use the stat function to determine the file type.


Check if you've the udev package, if you do, chances are that devices are generated on the fly, from the package description:

udev - rule-based device node and kernel event manager  

udev is a collection of tools and a daemon to manage events received from the 
kernel and deal with them in user-space.  Primarily this involves creating and
removing device nodes in /dev when hardware is discovered or removed from the
system.           

Events are received via kernel netlink messaged and processed according to 
rules in /etc/udev/rules.d and /lib/udev/rules.d, altering the name of the 
device node, creating additional symlinks or calling other tools and programs
including those to load kernel modules and initialise the device.   
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜