fpSymlink
Create a symbolic link
Declaration
Source position: bunxh.inc line 101
function fpSymlink(oldname: pchar; newname: pchar) : cint;
Description
SymLink makes NewName point to the file in OldName, which doesn't necessarily exist. The two files DO NOT have the same inode number. This is known as a 'soft' link.
The permissions of the link are irrelevant, as they are not used when following the link. Ownership of the file is only checked in case of removal or renaming of the link.
The function returns zero if the call was successful, a nonzero value if the call failed.
Errors
Extended error information is returned by the FpGetErrno function.
- sys_eperm
- The file system containing oldpath and newpath does not support linking files.
- sys_eaccess
- Write access for the directory containing Newpath is disallowed, or one of the directories in OldPath or NewPath has no search (=execute) permission.
- sys_enoent
- A directory entry in OldPath or NewPath does not exist or is a symbolic link pointing to a non-existent directory.
- sys_enotdir
- A directory entry in OldPath or NewPath is nor a directory.
- sys_enomem
- Insufficient kernel memory.
- sys_erofs
- The files are on a read-only file system.
- sys_eexist
- NewPath already exists.
- sys_eloop
- OldPath or NewPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself.
- sys_enospc
- The device containing NewPath has no room for another entry.
See also
Name | Description |
---|---|
FpLink | Create a hard link to a file |
FpReadLink | Read destination of symbolic link |
FpUnLink | Unlink (i.e. remove) a file. |
Example
Program Example22;
{ Program to demonstrate the SymLink and UnLink functions. }
Uses baseunix,Unix;
Var F : Text;
S : String;
begin
Assign (F,'test.txt');
Rewrite (F);
Writeln (F,'This is written to test.txt');
Close(f);
{ new.txt and test.txt are now the same file }
if fpSymLink ('test.txt','new.txt')<>0 then
writeln ('Error when symlinking !');
{ Removing test.txt still leaves new.txt
Pointing now to a non-existent file ! }
If fpUnlink ('test.txt')<>0 then
Writeln ('Error when unlinking !');
Assign (f,'new.txt');
{ This should fail, since the symbolic link
points to a non-existent file! }
{$i-}
Reset (F);
{$i+}
If IOResult=0 then
Writeln ('This shouldn''t happen');
{ Now remove new.txt also }
If fpUnlink ('new.txt')<>0 then
Writeln ('Error when unlinking !');
end.