Difference between hardlinks and symlinks
Hardlinks
- implementation of 
ln 
- kinda like shortcut, but a shortcut to a physical memory location!!!!
 
/*
 * creates new file, that points to same memory location as provided file
 *  - if one of the files is edited, then both files change
 *  - if one of the files gets deleted, then just inode of that file, that points to that location is deleted
 *      other file stays undeleted, with same content
 */
int hardlink(char *dest, char *name) {
    if(link(dest, name) < 0)
       return errno;
    return 0;
}
Softlinks
- implementation of 
ln -s 
- it works like a shortcut to original file
 
/*
 * creates a new file, that points to provided file
 *  - if one of the files is edited, then both files change
 *  - if original file gets deleted, then also disk contents gets deleted, and link is broken
 */
int softlink(char *dest, char *name) {
    if(symlink(dest, name) < 0)
        return errno;
    return 0;
}