fpSymlink function
Create a symbolic link.
Declaration
function fpSymlink(oldname: PAnsiChar; newname: PAnsiChar): cintDescription
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
Newpathis disallowed, or one of the directories inOldPathorNewPathhas no search (=execute) permission. - sys_enoent
- A directory entry in
OldPathorNewPathdoes not exist or is a symbolic link pointing to a non-existent directory. - sys_enotdir
- A directory entry in
OldPathorNewPathis nor a directory. - sys_enomem
- Insufficient kernel memory.
- sys_erofs
- The files are on a read-only file system.
- sys_eexist
-
NewPathalready exists. - sys_eloop
-
OldPathorNewPathhas a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. - sys_enospc
- The device containing
NewPathhas no room for another entry.
See also
Example: ex22
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.An experiment, built from development snapshots. Not the official Free Pascal or Lazarus documentation.
