⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 列表9.10.txt

📁 klinux书籍的配套光盘。可以学习学习。
💻 TXT
字号:
【列表9.10】SysLog的程序代码。
 unit SysLogMain;
interface
uses
   SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs,
  QStdCtrls, Libc;
type
   TSysLogMainForm = class(TForm)
       ExitBtn: TButton;
       MonitorGroup: TGroupBoX;
       Memo: TMemo;
       NumCharsCombo: TComboBOX;
       DisplayBtn: TButton;
       Label1: TLabel;
       Label2: TLabel;
       EditGroup: TGroupBox;
       EnterBtn: TButton;
       LogEdit: TEdit;
       LogInfoRB: TRadioButton;
       DebugInfoRB: TRadioButton;
       MsgLogRB: TRadioButton;
       DbgLogRB: TRadioButton;
       procedure ExitBtnClick(Sender: TObject);
       procedure DisplayBtnClick(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure NumCharsComboClick(Sender: TObject)
       procedure EnterBtnClick(Sender: TObject);
       procedure MsgLogRBClick(Sender: TObject);
       procedure DbgLogRBClick(Sender: TObject);
      private
         { Private declarations }
      public
         { Public declarations }
      end;
   const
       SYS_MSGS_FNAME = '/var/log/messages';
       SYS_DEBUG_FNAME = '/var/log/debug';
    var
       SysLogMainForm: TSysLogMainForm;
       SysMsgFileOK : Boolean;
       CharsToRead : Integer;
       AppName : String;
     implementation
     {$R *.xfm}
     function CanReadSysMsgsFile : Boolean;
       var
       FD : Integer;
begin
 FD := open(SYS_MSGS_FNAME, O_RDONLY);
 Result := FD <> -1;
 __close(FD);
end;

procedure TSysLogMainForm. ExitBtnClick(Sender: TObject);
begin
 Close;
end;

procedure TSysLogMainForm. DisplayBtnClick(Sender: TObject);
var
 FD : Integer;
 Buf : array[0..32768] of Char;
 SR : TSearchRec;
 FSize : Longint;
 s : String;
 MaxChars : Integer;
begin
 Memo. Lines.Clear;
 if MsgLogRB.Checked
   then begin
            FD := open(SYS_MSGS_FNAME, O_RDONLY);
            if FD = -1
             then begin
                      ShowMessage('Can't open system message log.');
                       Exit;
                     end;
            FindFirst(SYS MSGS_FNAME, 0, SR);
           end
   else begin
            FD := open(SYS_DEBUG_FNAME, O_RDONLY);
            if FD = -1
              then begin
                       ShowMessage('Can't open system debug log.');
                       Exit;
                     end;
            FindFirst(SYS_DEBUG_FNAME, 0, SR);
           end;
  FSize := SR.Size;
  FindClose(SR);
MaxChars := CharsToRead;
if MaxChars > FSize then MaxChars := FSize - 1;
if MaxChars > SizeOf(BUF) then MaxChars := sizeOf(BUF) - 1;
lseek(FD,FSize - MaxChars, SEEK_SET);
__read(FD, Buf, MaxChars);
__close(FD);
 Buf[MaxChars] := chr(0);
 s := StrPas(Buf);
 Memo. Lines.Add(s);
end;
procedure TSysLogMainForm. FormCreate(Sender: TObject);
begin
  AppName := ExtractFileName(Application. ExeName);
  CharsToRead :=
     StrToint(NumCharsCombo. Items[NumCharsCombo.ItemIndex]);
  SysMsgFileOK := CanReadSysMsgsFile;
  if not SysMsgFileOK
    then begin
             Memo. Enabled := False;
             DisplayBtn. Enabled := False;
             NumCharsCombo. Enabled := False;
             MsgLogRB.Enabled := False;
             DbgLogRb. Enabled := False;
           end;
  end;
  procedure TSysLogMainForm. NumCharsComboClick(Sender: TObjec
  begin
    CharsToRead :=
       StrToint(NumCharsCombo. Items[NumCharsCombo.ItemIndex]);
  end;
   procedure TSysLogMainForm. EnterBtnClick(Sender: TObject);
   var
     s : String;
   begin
     s := LogEdit.Text;
     openlog(PChar(AppName), LOG_PID, LOG_USER);
     if LogInfoRB.Checked
       then syslog(LOG_INFO, PChar(s))
       else syslog(LOG_DEBUG, PChar(s));
     closelog;
      ShowMessage('Message written to system log.');
      LogEdit.Text := '';
    end;
procedure TSysLogMainForm. MsgLogRBClick(Sender: TObject);
begin
 Memo. Lines.Clear;
end;
procedure TSysLogMainForm. DbgLogRBClick(Sender: TObject);
begin
 Memo. Lines.Clear;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -