1. 程式人生 > >處理utmp,wtmp,btmp檔案的介面函式-----getutent()、 getutid()、...

處理utmp,wtmp,btmp檔案的介面函式-----getutent()、 getutid()、...

#include <utmp.h>
    struct utmp *getutent(void);
    struct utmp *getutid(const struct utmp *ut);
    struct utmp *getutline(const struct utmp *ut);
    struct utmp *pututline(const struct utmp *ut);
    void setutent(void);
    void endutent(void);
    int utmpname(const char *file);
------
utmp檔案中的結構體及其相關資訊的詳細定義如下:
 /* Values for ut_type field, below */
/*ut_type的值和其含義*/ #define EMPTY 0 /* Record does not contain valid info(formerly known as UT_UNKNOWN on Linux) */ #define RUN_LVL 1 /* Change in system run-level (seeinit(8)) */ #define BOOT_TIME 2 /* Time of system boot (in ut_tv) */ #define NEW_TIME 3 /* Time after system clock change(in ut_tv) */
#define OLD_TIME 4 /* Time before system clock change(in ut_tv) */ #define INIT_PROCESS 5 /* Process spawned by init(8) */ #define LOGIN_PROCESS 6 /* Session leader process for user login */ /*使用者登入時建立的會話的程序組組長*/ #define USER_PROCESS 7 /* Normal process */
/*正常程序*/ #define DEAD_PROCESS 8 /* Terminated process */ /*終止程序*/ #define ACCOUNTING 9 /* Not implemented */ #define UT_LINESIZE 32 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status { /* Type for ut_exit, below */ short int e_termination; /* Process termination status */ short int e_exit; /* Process exit status */ }; struct utmp { short ut_type; /* Type of record */ /*記錄型別*/ pid_t ut_pid; /* PID of login process */ /*登入程序的PID*/ char ut_line[UT_LINESIZE]; /* Device name of tty - "/dev/" */ char ut_id[4]; /* Terminal name suffix, or inittab(5) ID */ char ut_user[UT_NAMESIZE]; /* Username */ /*使用者名稱*/ char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or kernel version for run-level messages */ /*遠端登入的主機名*/ struct exit_status ut_exit; /* Exit status of a process marked as DEAD_PROCESS; not used by Linux init (1 */ /*標記是DEAD_PROCESS的程序退出時的狀態*/ /* The ut_session and ut_tv fields must be the same size when compiled 32- and 64-bit. This allows data files and shared memory to be shared between 32- and 64-bit applications. */ #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 int32_t ut_session; /* Session ID (getsid(2)), used for windowing */ struct { int32_t tv_sec; /* Seconds */ int32_t tv_usec; /* Microseconds */ } ut_tv; /* Time entry was made */ #else long ut_session; /* Session ID */ /*會話id*/ struct timeval ut_tv; /* Time entry was made */ /*登入時間記錄*/ #endif int32_t ut_addr_v6[4]; /* Internet address of remote host; IPv4 address uses just ut_addr_v6[0] */ /*記錄登入的遠端主機地址,ipv4型別地址僅使用陣列的第一個元素記錄*/ char __unused[20]; /* Reserved for future use */ }; /* Backward compatibility hacks */ #define ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6[0] ------ int utmpname(const char *file); 描述:設定內容格式為utmp的檔案的檔名,以供後續的其他介面函式對其訪問。如果在呼叫這個函式之前呼叫了其他對utmp檔案操作的函式,則操作的檔案將由_PATH_UTMP指定,這個巨集定義在<paths.h>中。 引數: const char *file:需要被設定的檔名 返回值: 0,表示設定成功 -1,表示設定失敗,errno被設定 ------ void setutent(void); 描述:將指定的utmp檔案的檔案指標移動到檔案的開始,在呼叫其他操作utmp檔案的介面函式之前,先呼叫該函式。 引數:無 返回值:無 ------ void endutent(void); 描述:關閉utmp檔案,在使用者不再訪問utmp檔案的時候一定要呼叫該函式。 引數:無 返回值:無 ------ struct utmp *getutent(void); 描述:從檔案指標當前的位置開始,讀取一個utmp結構體長度的內容。 引數:無 返回值: 成功,返回讀取到的資料的起始地址(這個地址是在靜態儲存區的,所以每次呼叫返回的地址都是一樣的,但是地址上的內容會被後續的呼叫所覆蓋) 失敗,返回NULL,errno被設定 ------ struct utmp *getutid(const struct utmp *ut); 描述:根據ut提供的資訊,從utmp檔案的檔案指標的當前位置,向上查詢符合條件的結構體。如果ut->ut_type 是 RUN_LVL,BOOT_TIME,NEW_TIME,OLD_TIME,那麼該函式將會根據ut_type,來查詢匹配的結構體;如果ut->ut_type 是INIT_PROCESS,LOGIN_PROCESS,USER_PROCESS, DEAD_PROCESS,該函式將會根據ut_id來查詢匹配的結構體 引數: const struct utmp *ut:需要查詢的結構體的地址 返回值: 成功,返回查詢到的結構體的首地址 失敗,返回NULL,errno被設定 ----- struct utmp *getutline(const struct utmp *ut); 描述:從utmp檔案的檔案指標的當前位置開始向下查詢,只匹配ut_type為USER_PROCESS,LOGIN_PROCESS,並返回第一個ut_line相匹配的結構體的地址。 引數: const struct utmp *ut:需要查詢的結構體 返回值: 成功,查詢到的結構體的首地址 失敗,返回NULL,且errno被設定 ------ struct utmp *pututline(const struct utmp *ut); 描述:使用getutid函式在utmp檔案中,查詢對應的結構體,並寫入,如果找不到,就會在utmp檔案的末尾插入。 引數:需要插入到utmp檔案中的結構體 返回值: 成功,返回插入的結構體的首地址 失敗,返回null,errno被設定

相關推薦

處理utmpwtmpbtmp檔案介面函式-----getutent() getutid()...

#include <utmp.h> struct utmp *getutent(void); struct utmp *getutid(const struct utmp *ut); struct utmp *getutlin

循序漸進VUE+Element 前端應用開發(22)--- 簡化main.js處理程式碼抽取過濾器全域性介面函式元件註冊等處理邏輯到不同的檔案

在我們開發程式碼的時候,一般都喜歡進行一定程度的重構,以達到簡化程式碼、關注點分離、提高程式碼可讀性等等方面的考慮,本篇隨筆介紹在VUE+Element 前端應用開發過程中,實現簡化main.js處理程式碼,抽取過濾器、全域性介面函式、元件註冊等處理邏輯到不同的檔案中做法。 1、main.js處理邏輯 我們知

嵌入式Linux標準IO獲取檔案大小fgetc()定位流獲取檔案大小fteel()rewind()/fseek()處理錯誤資訊perror()/strerror()

#include <stdio.h> #include <errno.h> #include <string.h> int get_file_size(const char *file); int main(int argc, const char *a

關於nginx配置負載均衡nginx.conf配置檔案正確一直跳出nginx歡迎介面

小編跟大家一樣,明明配置檔案正確,但就是一直跳出nginx歡迎介面 這個是我nginx的安裝目錄,我在這個目錄下吧nginx.conf修改配置,發現沒用。     於是我看了nginx啟動命令 /usr/local/nginx/sbin/nginx 。我

如何使用elementUI呼叫一次介面同時上傳圖片和檔案同時需要攜帶其他引數實現呼叫後端介面

今天有一個坑,同時要上傳圖片和檔案,而且圖片要展示縮圖,檔案要展示列表。 我的思路是: 首先,只上傳附件照片,這個直接看ele的官方例子就行,不僅僅上傳附件照片,還同時上傳其他引數。 然後,再做上傳照片和檔案,上傳其他引數,其實也就是檔案合併。   一、上傳照片和其他引

Qt 工程中處理Alt+F4鍵關閉當前頂層介面的問題

可以單獨寫一個事件過濾類,然後需要遮蔽Alt+F4鍵的介面,新增事件過濾到這個類上。 class Handler : public QObject { Q_OBJECT public: explicit Handler(QObject *parent = 0); stat

python檔案文字處理:刪除空白行刪除固定幾行刪除固定列

話不多說,上程式碼 # coding=gbk # clearBlankline def clearBlankline(infile,outfile): infopen=open(infile,'r',encoding='utf-8') outopen=open(outfile,'

svc 報錯“由於擴充套件配置問題而無法提供您請求的頁面。如果該頁面是指令碼請新增處理程式。如果應下載檔案請新增 MIME 對映。“

問題: 系統沒有預設為 IIS 註冊 WCF 服務的 svc 檔案的 MIME 對映。 解決方法: 以管理員身份執行 cmd.exe 切換到目錄 C:\Windows\Microsoft.NET\Framework\v3.0\Windows Co

Not Found 由於擴充套件配置問題而無法提供您請求的頁面。如果該頁面是指令碼請新增處理程式。如果應下載檔案請新增 MIME 對映。

HTTP 錯誤 404.3 - Not Found 由於擴充套件配置問題而無法提供您請求的頁面。如果該頁面是指令碼,請新增處理程式。如果應下載檔案,請新增 MIME 對映。 執行:cmd,轉到C:\Windows\Windows Microsoft.Net \ Frame

關於 HTML5 的檔案上傳處理相容以及 BLOB 物件的使用

目前 HTML5 已經逐漸普及併成為主流,與之相關的 Single Page App 技術也逐漸被廣泛應用起來,加上 Canvas 等等新的工具的支援,在前端可以做的事情可謂是非常多。 但是,不得不否認,各種原生的 HTML5 工具支援相容性還並不是太好,本文的緣起就

svc 報“由於擴充套件配置問題而無法提供您請求的頁面。如果該頁面是指令碼請新增處理程式。如果應下載檔案請新增 MIME 對映。“的HTTP 錯誤 404.3 – Not Found

原因:系統沒有預設為IIS註冊WCF服務的svc檔案的MIME對映。 解決方法:管理員身份執行C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.e

檔案字尾與Mime型別對照表/由於擴充套件配置問題而無法提供您請求的頁面。如果該頁面是指令碼請新增處理程式。如果應下載檔案請新增 MIME 對映。

//文件檔案型別的 .ai application/postscript .eps application/postscript .exe application/octet-stream .doc application/vnd.ms-w

靜態庫資原始檔xib圖片打包處理編譯生成的靜態庫.a包檔案太大縮小解決方法

給自己做個標記,詳情請訪問以下地址,親測過,沒問題的 另外,編譯生成的.a檔案太大,但又沒有冗餘的檔案可以刪除已減少體積,找了很久才找到解決辦法,如下: Build Settings-->Generate Debug Symbols將值設為NO

處理從第三方獲取的php資料介面將其輸出純json格式

昨天找了很多獲取介面資料的網站,今天想要用用這些介面,結果發現不會用,主要是返回的資料格式不會用,好心塞呀像我這種php小白,搗鼓了很久很久,才把它搞懂,必須記下來希望當您遇到同樣問題的時候可以節約一點時間吧利用第三方提供的php程式碼,是下面這樣的<?php $met

啟動wampserver在localhost介面進入資料夾網頁不顯示檔案

啟動wampserver,在localhost介面進入資料夾(此處是指自己建立的檔案),網頁不顯示檔案? 本地資料夾目錄示意圖: 網頁中的操作示意圖: 點選輸入localhost: demo資料夾目錄下的檔案只有為預設(index.ph

解析XML時DTD的處理--解析時忽略生成XML檔案時加上

一、解析XML檔案時,遇到DTD的定義要怎麼辦?     下面這段程式碼是ibatis配置檔案,用w3c Dom(其實任意一種解析方式都是這樣)都會從http://www.ibatis.com/dtd/sql-map-config-2.dtd  這 個地址找對應的DTD檔案進行校驗,如果因特網上這個地址

Ubuntu系統下nginx和ftp搭建圖片伺服器處理外網訪問不到檔案問題

主要原因:nginx.conf的配置問題 需要配置圖片伺服器 方法一、在配置檔案server{}中location /{} 修改配置: location / {       root /home/uftp/www;#定義伺服器預設的網站根目錄位置       i

Python指令碼批處理JSON檔案去除製表符空格回車等多餘符號

root_dir_path = "E:\popstar3\Popstar3_3.x_0_small\Resources\ui" extern_name_list = [".json", ".ExportJson"] import os import

ffmpeg處理斷網時生成一個檔案中遇到的問題

      由於網路環境不穩定,在實際的錄影過程中常常會將錄製的檔案儲存為多個視訊檔案,後期就需要更多的資源來進行視訊合併,並且增加了額外的時間開銷。為了解決這個問題,同時考慮到時間的開銷以及資源佔用率最小,就想出了這樣的一個辦法,在斷網時,av_read_frame()會在

Python 獲取介面資料解析JSON,寫入檔案

用於練手的例子,從國家氣象局介面上獲取JSON資料,將它寫入檔案中,並解析JSON; 總的來說,在程式碼量上,python程式碼量要比java少很多。而且python看起來更直觀一些; 以下是程式碼: import types import urllib2 import j