Help please...random() in kernel? and Links?

1.Why is it not possible to use random() in kernel code? If the kernel cannot do that, what is going on when kernel code contains calls to printf(), it works fine?

2.Symbolic links in Linux and Unix can cross partition boundaries, but hard links cannot. Can somebody explain this to me?

Thank you

A hard link creates a new filesystem entry pointing to the data of the linked file - thus, it's more like a copy than a link, except that both files share the same data. With a hard link, if you delete the original, the linked file will still exist with all the original data, because it's not a special type of file, it's a filesystem entry pointing to the original data. Does that make sense? That's why you can't make a hard link across filesystems - the data being linked doesn't exist on the other filesystem.