首次調(diào)用getpwent(),打開(kāi)/etc/passwd并返回指向文件中第一個(gè)入口項(xiàng)的
指針,保持調(diào)用之間文件的打開(kāi)狀態(tài).
再調(diào)用getpwent()可順序地返回口令文件中的各入口項(xiàng).
調(diào)用setpwent()把口令文件的指針重新置為文件的開(kāi)始處.
使用完口令文件后調(diào)用endpwent()關(guān)閉口令文件.
*putpwent():修改或增加/etc/passwd文件中的入口項(xiàng).
此子程序?qū)⑷肟陧?xiàng)寫到一個(gè)指定的文件中,一般是一個(gè)臨時(shí)文件,直接寫口
令文件是很危險(xiǎn)的.最好在執(zhí)行前做文件封鎖,使兩個(gè)程序不能同時(shí)寫一個(gè)
文件.算法如下:
. 建立一個(gè)獨(dú)立的臨時(shí)文件,即/etc/passnnn,nnn是PID號(hào).
. 建立新產(chǎn)生的臨時(shí)文件和標(biāo)準(zhǔn)臨時(shí)文件/etc/ptmp的鏈,若建鏈?zhǔn)?
則為有人正在使用/etc/ptmp,等待直到/etc/ptmp可用為止或退出.
. 將/etc/passwd拷貝到/etc/ptmp,可對(duì)此文件做任何修改.
. 將/etc/passwd移到備份文件/etc/opasswd.
. 建立/etc/ptmp和/etc/passwd的鏈.
. 斷開(kāi)/etc/passnnn與/etc/ptmp的鏈.
注意:臨時(shí)文件應(yīng)建立在/etc目錄,才能保證文件處于同一文件系統(tǒng)中,建
鏈才能成功,且臨時(shí)文件不會(huì)不安全.此外,若新文件已存在,即便建
鏈的是root用戶,也將失敗,從而保證了一旦臨時(shí)文件成功地建鏈后
沒(méi)有人能再插進(jìn)來(lái)干擾.當(dāng)然,使用臨時(shí)文件的程序應(yīng)確保清除所有
臨時(shí)文件,正確地捕捉信號(hào).
(3)/etc/group的處理
有一組類似于前面的子程序處理/etc/group的信息,使用時(shí)必須用include
語(yǔ)句將/usr/include/grp.h文件加入到自己的程序中.該文件定義了group
結(jié)構(gòu),將由getgrnam(),getgrgid(),getgrent()返回group結(jié)構(gòu)指針.
*getgrnam():在/etc/group文件中搜索指定的小組名,然后返回指向小組入
口項(xiàng)的指針.
*getgrgid():類似于前一子程序,不同的是搜索指定的GID.
*getgrent():返回group文件中的下一個(gè)入口項(xiàng).
*setgrent():將group文件的文件指針恢復(fù)到文件的起點(diǎn).
*endgrent():用于完成工作后,關(guān)閉group文件.
*getuid():返回調(diào)用進(jìn)程的實(shí)際UID.
*getpruid():以getuid()返回的實(shí)際UID為參數(shù),確定與實(shí)際UID相應(yīng)的登錄
名,或指定一UID為參數(shù).
*getlogin():返回在終端上登錄的用戶的指針.
系統(tǒng)依次檢查STDIN,STDOUT,STDERR是否與終端相聯(lián),與終端相聯(lián)的標(biāo)準(zhǔn)輸
入用于確定終端名,終端名用于查找列于/etc/utmp文件中的用戶,該文件
由login維護(hù),由who程序用來(lái)確認(rèn)用戶.
*cuserid():首先調(diào)用getlogin(),若getlogin()返回NULL指針,再調(diào)用
getpwuid(getuid()).
*以下為命令:
*logname:列出登錄進(jìn)終端的用戶名.
*who am i:顯示出運(yùn)行這條命令的用戶的登錄名.
*id:顯示實(shí)際的UID和GID(若有效的UID和GID和實(shí)際的不同時(shí)也顯示有效的
UID和GID)和相應(yīng)的登錄名.
(4)加密子程序
1977年1月,NBS宣布一個(gè)用于美國(guó)聯(lián)邦政府ADP系統(tǒng)的網(wǎng)絡(luò)的標(biāo)準(zhǔn)加密法:數(shù)
據(jù)加密標(biāo)準(zhǔn)即DES用于非機(jī)密應(yīng)用方面.DES一次處理64BITS的塊,56位的加
密鍵.
*setkey(),encrypt():提供用戶對(duì)DES的存取.
此兩子程序都取64BITS長(zhǎng)的字符數(shù)組,數(shù)組中的每個(gè)元素代表一個(gè)位,為0
或1.setkey()設(shè)置將按DES處理的加密鍵,忽略每第8位構(gòu)成一個(gè)56位的加
密鍵.encrypt()然后加密或解密給定的64BITS長(zhǎng)的一塊,加密或解密取決
于該子程序的第二個(gè)變?cè)?0:加密 1:解密.
*crypt():是UNIX系統(tǒng)中的口令加密程序,也被/usr/lib/makekey命令調(diào)用.
crypt()子程序與crypt命令無(wú)關(guān),它與/usr/lib/makekey一樣取8個(gè)字符長(zhǎng)
的關(guān)鍵詞,2個(gè)salt字符.關(guān)鍵詞送給setkey(),salt字符用于混合encrypt()
中的DES算法,最終調(diào)用encrypt()重復(fù)25次加密一個(gè)相同的字符串.
返回加密后的字符串指針.
(5)運(yùn)行shell
*system():運(yùn)行/bin/sh執(zhí)行其參數(shù)指定的命令,當(dāng)指定命令完成時(shí)返回.
推薦閱讀
- 什么叫停牌
- 收市吉祥語(yǔ)
- 臘肉放在陽(yáng)臺(tái)晚上不收行不行
- 煙羅的小說(shuō)語(yǔ)錄
- 怎么挑蝦線的正確做法
- 5g信號(hào)塔輻射安全距離是多少
- 螞蟻寶卡特權(quán)福利怎么免費(fèi)升級(jí)?螞蟻寶卡特權(quán)福利免費(fèi)升級(jí)方法
- 美瞳怎么取下來(lái)
- iphone手機(jī)定位怎么開(kāi)
- 什么叫琵琶
