Преглед изворни кода

+ Added mising functions, part I

michael пре 25 година
родитељ
комит
114652d0b1
1 измењених фајлова са 236 додато и 13 уклоњено
  1. 236 13
      docs/linux.tex

+ 236 - 13
docs/linux.tex

@@ -49,18 +49,66 @@ TGlob = record
 \end{verbatim}
 \end{verbatim}
 The following types are used in the signal-processing procedures.
 The following types are used in the signal-processing procedures.
 \begin{verbatim}
 \begin{verbatim}
-{$Packrecords 1}
+tfpreg = record
+  significand: array[0..3] of word;
+  exponent: word;
+end;
+
+pfpstate = ^tfpstate;
+tfpstate = record
+  cw, sw, tag, ipoff, cssel, dataoff, datasel: cardinal;
+  st: array[0..7] of tfpreg;                            
+  status: cardinal;
+end;
+
+PSigContextRec = ^SigContextRec;
+SigContextRec = record
+  gs, __gsh: word;
+  fs, __fsh: word;
+  es, __esh: word;
+  ds, __dsh: word;
+  edi: cardinal;   
+  esi: cardinal;   
+  ebp: cardinal;   
+  esp: cardinal;   
+  ebx: cardinal;   
+  edx: cardinal;   
+  ecx: cardinal;   
+  eax: cardinal;   
+  trapno: cardinal;
+  err: cardinal;   
+  eip: cardinal;   
+  cs, __csh: word; 
+  eflags: cardinal;
+  esp_at_signal: cardinal;
+  ss, __ssh: word;
+  fpstate: pfpstate;
+  oldmask: cardinal;
+  cr2: cardinal;
+  end;
+\end{verbatim}
+The above records contain information about the processor state and process
+state at the moment a signal is sent to your program.
+
+The records below are used in catching signals.
+\begin{verbatim}
+TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
 SignalHandler   = Procedure ( Sig : Integer);cdecl;
 SignalHandler   = Procedure ( Sig : Integer);cdecl;
+
 PSignalHandler  = SignalHandler;
 PSignalHandler  = SignalHandler;
 SignalRestorer  = Procedure;cdecl;
 SignalRestorer  = Procedure;cdecl;
 PSignalrestorer = SignalRestorer;
 PSignalrestorer = SignalRestorer;
-SigActionRec = Record
-  Sa_Handler  : Signalhandler;
-  Sa_Mask     : Longint;
-  Sa_flags    : Integer;
-  Sa_Restorer : SignalRestorer;
+SigActionRec = packed record
+  Handler  : record
+    case byte of   
+      0: (Sh: SignalHandler);
+      1: (Sa: TSigAction);   
+    end;
+  Sa_Mask     : SigSet;
+  Sa_Flags    : Longint;
+  Sa_restorer : SignalRestorer; { Obsolete - Don't use }
 end;
 end;
-PSigActionRec = ^SigActionRec;
+  PSigActionRec = ^SigActionRec;
 \end{verbatim}
 \end{verbatim}
 Stat is used to store information about a file. It is defined in the
 Stat is used to store information about a file. It is defined in the
 syscalls unit.
 syscalls unit.
@@ -516,7 +564,6 @@ errors:
 \item[sys\_enfile] The system file table is full.
 \item[sys\_enfile] The system file table is full.
 \end{description}
 \end{description}
 Other errors include the ones by the fork and exec programs
 Other errors include the ones by the fork and exec programs
-
 \SeeAlso
 \SeeAlso
 \seef{AssignPipe}, \seep{POpen},\seem{pipe}{2}
 \seef{AssignPipe}, \seep{POpen},\seem{pipe}{2}
 \end{function}
 \end{function}
@@ -665,6 +712,55 @@ symbolic link, i.e. a symbolic link, whose expansion points to itself.
 
 
 \FPCexample{ex23}
 \FPCexample{ex23}
 
 
+\begin{function}{Clone}
+\Declaration
+TCloneFunc=function(args:pointer):longint;cdecl;
+Clone(func:TCloneFunc;sp:pointer;flags:longint;args:pointer):longint;
+\Description
+Clone creates a child process which is a copy of the parent process, just
+like \seef{Fork} does. In difference with \var{Fork}, however, the child
+process shares some parts of it's execution context with its parent, so it
+is suitable for the implementation of threads: many instances of a program
+that share the same memory.
+
+When the child process is created, it starts executing the function
+\var{Func}, and passes it \var{Args}. The return value of \var{Func} is 
+either the explicit return value of the function, or the exit code of
+the child process.
+
+The \var{sp} pointer points to the memory reserved as stack space for the
+child process. This address should be the top of the memory block to be used
+as stack.
+
+The \var{Flags} determine the behaviour of the \var{Clone} call. The low
+byte of the Flags contains the number of the signal that will be  sent to 
+the parent when  the child dies. 
+This may be bitwise OR'ed with the following constants:
+\begin{description}
+\item[CLONE\_VM] Parent and child share the same memory space, including
+memory (un)mapped with subsequent \var{mmap} calls.
+\item[CLONE\_FS] Parent and child have the same view of the filesystem;
+the \var{chroot}, \var{chdir} and \var{umask} calls affect both processes.
+\item[CLONE\_FILES] the file descriptor table of parent and child is shared. 
+\item[CLONE\_SIGHAND] the parent and child share the same table of signal
+handlers. The signal masks are different, though.
+\item[CLONE\_PID] PArent and child have the same process ID.
+\end{description}
+
+Clone returns the process ID in the parent process, and -1 if an error
+occurred.
+\Errors
+On error, -1 is returned to the parent, and no child is created.
+\begin{description}
+\item [sys\_eagain] Too many processes are running.
+\item [sys\_enomem] Not enough memory to create child process.
+\end{description}
+\SeeAlso
+\seef{Fork}, \seem{clone}{2}
+\end{function}
+
+\FPCexample{ex14}
+
 \begin{function}{CloseDir}
 \begin{function}{CloseDir}
 \Declaration
 \Declaration
 Function CloseDir (p:pdir) : integer;
 Function CloseDir (p:pdir) : integer;
@@ -1396,12 +1492,54 @@ On error, -1 is returned to the parent, and no child is created.
 \begin{description}
 \begin{description}
 \item [sys\_eagain] Not enough memory to create child process.
 \item [sys\_eagain] Not enough memory to create child process.
 \end{description}
 \end{description}
+\SeeAlso
+\seep{Execve}, \seef{Clone}, \seem{fork}{2}
+\end{function}
 
 
+\begin{function}{FRename}
+\Declaration
+Function  FReName (OldName,NewName : Pchar) : Boolean;
+Function  FReName (OldName,NewName : String) : Boolean;
+\Description
+\var{FRename} renames the file \var{OldName} to \var{NewName}. \var{NewName}
+can be in a different directory than \var{OldName}, but it cannot be on
+another partition (device). Any existing file on the new location will be replaced.
+
+If the operation fails, then the \var{OldName} file will be preserved. 
+
+The function returns \var{True} on succes, \var{False} on failure.
+\Errors
+On error, errors are reported in \var{LinuxError}. Possible errors include:
+\begin{description}
+\item[sys\_eisdir] \var{NewName} exists and is a directory, but \var{OldName}
+is not a directory.
+\item[sys\_exdev] \var{NewName} and \var{OldName} are on different devices.
+\item[sys\_enotempty or sys\_eexist] \var{NewName} is an existing, non-empty
+directory. 
+\item[sys\_ebusy] \var{OldName} or \var{NewName} is a directory and is in
+use by another process.
+\item[sys\_einval] \var{NewName} is part of \var{OldName}.
+\item[sys\_emlink] \var{OldPath} or \var{NewPath} already have tha maximum
+amount of links pointing to them.
+\item[sys\_enotdir] part of \var{OldName} or \var{NewName} is not
+directory.
+\item[sys\_efault] For the \var{pchar} case: One of the pointers points to
+an invalid address.
+\item[sys\_eaccess] access is denied when attempting to move the file.
+\item[sys\_enametoolong] Either \var{OldName} or \var{NewName} is too long.
+\item[sys\_enoent] a directory component in \var{OldName} or \var{NewName}
+didn't exist.
+\item[sys\_enomem] not enough kernel memory.
+\item[sys\_erofs] \var{NewName} or \var{OldName} is on a read-only file
+system.
+\item[sys\_eloop] too many symbolic links were encountered trying to expand
+\var{OldName} or \var{NewName}
+\item[sys\_enospc] the filesystem has no room for the new directory entry.
+\end{description}
 \SeeAlso
 \SeeAlso
-\seep{Execve}, \seem{fork}{2}
+\seef{UnLink}
 \end{function}
 \end{function}
 
 
-\FPCexample{ex14}
 
 
 \begin{procedure}{GetDate}
 \begin{procedure}{GetDate}
 \Declaration
 \Declaration
@@ -1557,7 +1695,7 @@ procedure GetLocalTimezone(timer:longint);
 initializes the \var{TZSeconds} variable, which is used to correct the epoch time
 initializes the \var{TZSeconds} variable, which is used to correct the epoch time
 to local time. 
 to local time. 
 
 
-You should never call this function directly. It is called by the
+There should never be any need to call this function directly. It is called by the
 initialization routines of the Linux unit.
 initialization routines of the Linux unit.
 \SeeAlso
 \SeeAlso
 \seef{GetTimezoneFile}, \seep{ReadTimezoneFile}
 \seef{GetTimezoneFile}, \seep{ReadTimezoneFile}
@@ -2055,6 +2193,20 @@ Function MkFifo (PathName: String; Mode : Longint) : Boolean;
 \seep{POpen}, \seef{MkFifo}, \seem{mkfifo}{4}
 \seep{POpen}, \seef{MkFifo}, \seem{mkfifo}{4}
 \end{function}
 \end{function}
 
 
+\begin{function}{MMap}
+\Declaration
+Function MMap(const m:tmmapargs):longint;
+\Description
+\var{MMap} maps or unmaps files or devices into memory. The different fields
+of the argument \var{m} determine what and how the \var{mmap} maps this:
+\begin{description}
+\item[address] Address where to mmap the device. This address is a hint
+\item[size]
+\item[prot]
+\item[flags]
+\item[fd]
+\item[offset]
+\end{description}
 \begin{procedure}{Nice}
 \begin{procedure}{Nice}
 \Declaration
 \Declaration
 Procedure Nice ( N : Integer);
 Procedure Nice ( N : Integer);
@@ -2168,6 +2320,40 @@ Errors are returned in LinuxError.
 
 
 For an example, see \seef{OpenDir}.
 For an example, see \seef{OpenDir}.
 
 
+\begin{function}{ReadLink}
+\Declaration
+Function  ReadLink(name,linkname:pchar;maxlen:longint):longint;
+Function  ReadLink(name:pathstr):pathstr;
+\Description
+\var{ReadLink} returns the file the symbolic link \var{name} is pointing 
+to. The first form of this function accepts a buffer \var{linkname} of
+length \var{maxlen} where the filename will be stored. It returns the
+actual number of characters stored in the buffer.
+
+The second form of the function returns simply the name of the file.
+\Errors
+On error, the first form of the function returns -1; the second one returns
+an empty string. \var{LinuxError} is set to report errors:
+\begin{description}
+\item[SYS\_ENOTDIR] A part of the path in \var{Name} is not a directory.
+\item[SYS\_EINVAL] maxlen is not positive, or the  file is not a symbolic link.
+\item[SYS\_ENAMETOOLONG] A pathname, or a component of a pathname,  was  too
+long.
+\item[SYS\_ENOENT] the link \var{name} does not exist.
+\item[SYS\_EACCES] No permission to search a directory in the path
+\item[SYS\_ELOOP]  Too many symbolic links were encountered in  trans­
+             lating the pathname.
+\item[SYS\_EIO] An  I/O  error occurred while reading from the file
+              system.
+\item[SYS\_EFAULT] The buffer is not part of the the process's memory space.
+\item[SYS\_ENOMEM] Not enough kernel memory was available.
+\end{description}
+\SeeAlso
+\seef{SymLink}
+\end{function}
+
+\FPCexample{ex62}
+
 \begin{procedure}{ReadTimezoneFile}
 \begin{procedure}{ReadTimezoneFile}
 \Declaration
 \Declaration
 procedure ReadTimezoneFile(fn:string);
 procedure ReadTimezoneFile(fn:string);
@@ -2402,6 +2588,19 @@ the range of the process.
 \seem{Sigprocmask}{2} 
 \seem{Sigprocmask}{2} 
 \end{procedure}
 \end{procedure}
 
 
+\begin{procedure}{SigRaise}
+\Declaration
+Procedure SigRaise(Sig:integer);
+\Description
+\var{SigRaise} sends a \var{Sig} signal to the current process.
+\Errors
+None.
+\SeeAlso
+\seef{Kill}, \seef{GetPid}
+\end{procedure}
+
+\FPCexample{ex65}
+
 \begin{procedure}{SigSuspend}
 \begin{procedure}{SigSuspend}
 \Declaration
 \Declaration
 Procedure SigSuspend (Mask : SigSet);
 Procedure SigSuspend (Mask : SigSet);
@@ -2469,13 +2668,37 @@ symbolic link, i.e. a symbolic link, whose expansion points to itself.
 \item[sys\_enospc] The device containing \var{NewPath} has no room for anothe
 \item[sys\_enospc] The device containing \var{NewPath} has no room for anothe
 entry.
 entry.
 \end{description}
 \end{description}
-
 \SeeAlso
 \SeeAlso
-\seef{Link}, \seef{UnLink}, \seem{Symlink}{2} 
+\seef{Link}, \seef{UnLink}, \seef{ReadLink}, \seem{Symlink}{2} 
 \end{function}
 \end{function}
 
 
 \FPCexample{ex22}
 \FPCexample{ex22}
 
 
+\begin{function}{SysInfo}
+\Declaration
+Function  SysInfo(var Info:TSysinfo):Boolean;
+\Description
+\var{SysInfo} returns system information in \var{Info}. Returned information
+in \var{Info} includes:
+\begin{description}
+\item[uptime] Number of seconds since boot.
+\item[loads]  1, 5 and 15 minute load averages.
+\item[totalram] total amount of main memory.
+\item[freeram] amount of free memory.
+\item[sharedram] amount of shared memory
+\item[bufferram] amount of memory used by buffers.
+\item[totalswap] total amount of swapspace.
+\item[freeswap] amount of free swapspace.
+\item[procs] number of current processes.
+\end{description}
+\Errors
+None.
+\SeeAlso
+\seep{Uname}
+\end{function}
+
+\FPCexample{ex64}
+
 \begin{function}{TCDrain}
 \begin{function}{TCDrain}
 \Declaration
 \Declaration
 Function TCDrain (Fd:longint) : Boolean;
 Function TCDrain (Fd:longint) : Boolean;