in reply to symbolic/hard links system calls

my question is why is it too complex for a system call, and how is this actually achieved ?

The reason why it is too complex for a system call is that as the name of the corresponding Perl function, rename suggests, it is actually a renaming. Just think of the file sitting there in the disk, identified by something: this something is actually called an inode, well at least in unixish terms. The filename is nothing but a name, and one file can have several of them: these are precisely the hard links. But of course a file residing in one specific device can not have a proper name referring to another one, don't you think so? (It can have a nickname... i.e. a wholly different file which has some content of its own, the content itself specifying the proper name it refers to. And these are the soft links.)

how "to achieve it" has already been told you!