版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 - 反 過 來, 對 于 前 面 提 到 的netscape 程 序, 也 可 以 通 過 編 寫 一 個(gè)script 文 件supernet 實(shí) 現(xiàn)運(yùn) 行:netscape &rm /.netscape/lock- 注1: 還 有 一 種 方 法, 只 適 用 于 普 通 用 戶: 在creat 創(chuàng) 建 一 個(gè) 新 文 件 時(shí), 即 使 權(quán) 限 實(shí)ment 不 允 許 寫, 該 文 件 也 被 打 開 用 作 寫。 但creat 在 截 斷 一 個(gè) 現(xiàn) 存 文 件 時(shí), 若 無 寫 權(quán)限n, 則 失 敗。 這 樣 就 可 以 只 通 過creat 系 統(tǒng) 調(diào) 用 實(shí) 現(xiàn) 文 件 信
2、 號 燈 機(jī) 制。 但 這 種做 法 有 一點(diǎn), 就 是 不 適 用 于 超 級 用 戶, 因 為 對 于 超 級 用 戶 沒 有 不 允 許 寫 的 東 西。- 注2: 這 不 適 于 帶& 符 號 的 后 臺 進(jìn) 程。- UNIX 系 統(tǒng) 的 文 件 信 號 燈 機(jī) 制- 作 為 一 個(gè) 多 用 戶、 多 任 務(wù) 的 操 作 系 統(tǒng),UNIX 允 許 某 個(gè) 程 序 同 時(shí) 運(yùn) 行 多 個(gè) 進(jìn) 程。 但 統(tǒng) 資 源 等 因 素 的 制 約, 要 求 一 次 只 能 有 一 個(gè) 進(jìn) 程 在 運(yùn) 行。 例 如 在Digital UNIX 下 運(yùn)行 第程 時(shí), 系 統(tǒng) 報(bào) 告 如 下 錯(cuò)
3、 誤 信 息:- Netscape has detected a /.netscape/lock file.- This may indicate that another user is running Netscape using your /.netscape files.- 實(shí) 際 上, 第 一 個(gè)Netscape 進(jìn) 程 在 運(yùn) 行 時(shí), 加 了 一 把 鎖, 禁 止 其 他Netscape 進(jìn) 程 啟 動。 當(dāng)鎖 打 開, 其 他 進(jìn) 程 才 能 進(jìn) 入。 這 就 是UNIX 的 信 號 燈 機(jī) 制。- 而Netscape 是 用 文 件 作 為 信 號 燈 的。 在 運(yùn) 行 前,
4、 先 檢 查 文 件/.netscape/lock 是 否 存 在:鎖 已 掛 上, 新 進(jìn) 程 不 能 運(yùn) 行, 只 好 等 待; 若 沒 有, 說 明 鎖 已 打 開, 可 以 運(yùn) 行 了。- 在 掌 握 了 文 件 信 號 燈 的 機(jī) 理 后, 可 以 自 行 設(shè) 計(jì) 一 套 萬 能 加 鎖 解 鎖 程 序, 為 每 個(gè)的 鎖 和 鑰 匙。 并 且 使 用 零 字 節(jié) 長 度 的 文 件 當(dāng) 鎖, 減 少 系 統(tǒng) 開 銷。- 我 們 用creat 和unlink 兩 個(gè) 系 統(tǒng) 調(diào) 用 實(shí) 現(xiàn) 加 解 鎖 和 檢 測 操 作。 一 個(gè) 進(jìn) 程 運(yùn) 行 之 前, 先鎖 文 件 是 否 存
5、在 注1。unlink 系 統(tǒng) 調(diào) 用 從 一 個(gè) 目 錄 中 刪 去 一 個(gè) 文 件 鏈, 若 成 功 則 返 回0,存 在; 若 失 敗, 表 明 文 件 不 存 在, 返 回-1。 如 果 還 沒 有 上 鎖, 就 要 用creat 系 統(tǒng) 調(diào) 用 創(chuàng)建已 掛 上, 雖 然 進(jìn) 程 并 未 運(yùn) 行, 但 unlink 無 疑 會 刪 除 鎖 文 件, 所 以 也 要 用creat 來 恢 復(fù)。cr 建 一 個(gè) 新 文 件, 函 數(shù) 標(biāo) 題 如 下:int creat(path, perms /* create file */char *path; /* path name */int p
6、erms; /* permission bits */- 其 中path 表 示 路 徑 加 文 件 名,perms 是10 位 的 文 件 權(quán) 限 描 述 字, 在 加 鎖 程 序 中 取0。 文時(shí), 初 始 長 度 為 零 字 節(jié), 用 它 來 做 鎖 文 件, 可 以 最 大 限 度 地 降 低 系 統(tǒng) 開 銷。- 鎖 文 件 規(guī) 定 為: 源 文 件 名+“.lok”。 這 樣 一 來, 就 真 正 做 到 了 一 個(gè) 程 序 配 一 把 鎖。- 下 面 就 列 出 加 鎖 和 解 鎖 的 程 序 清 單。 我 們 用 同 樣 的 程 序 完 成 這 兩 種 完 全 互 斥 的于 命
7、令 名 的 不 同。 在C 語 言 源 程 序 里, 變 量argv0 表 示 命 令 名,“l(fā)ockf” 是 上 鎖,“unlockf- 程 序LOCKF.C 暨UNLOCKF.C 的 源 代 碼#include < stdio.h >#include < errno.h >#include < fcntl.h >#include < cdatyp.h >void syserr(msg /*打印系統(tǒng)調(diào)用錯(cuò)誤信息并中止 */char *msg;extern int errno, sys_nerr;extern char *sys_errlist;
8、fprintf(stderr, "ERROR: %s (%d", msg, errno;if (errno >0 && errno< sys_nerrfprintf(stderr, " %sn", sys_errlisterrno;elsefprintf(stderr, "n"exit(1;short nlock(name /*上鎖過程 */char *name; char *path, *lockpath(;int fd, tries;extern int errno;short unlink_resul
9、t;path=lockpath(name; /*制鎖 */unlink_result=unlink(path; /*判斷是否已經(jīng)上鎖 */fd=creat(path, 0; /*上鎖 */if (fd=-1 | close(fd=-1syserr("nlock"if (unlink_result=-1return 0xff;return (0;void nunlock(name /*解鎖 */char *name; char *lockpath(;if (unlink(lockpath(name=-1syserr("nunlock"static char
10、 *lockpath(name /*制鎖的過程 */char *name; static char path20;char *strcat(;strcpy(path, name;return(strcat(path, ".lok"int main(argc, argvint argc;char *argv; if (argc!=2 printf("Usage: %s filenamenr", argv0;return(1;if (strcmp(argv0, "lockf"=0if (!nlock(argv1 printf("
11、You can not add the same lock twice!rn"return(2;if (strcmp(argv0, "unlockf"=0nunlock(argv1;return(0;本程序的用法是:lockf 源文件名或unlockf 源文件名- 要 真 正 實(shí) 現(xiàn) 信 號 燈 機(jī) 制, 我 們 還 必 須 準(zhǔn) 備 一 個(gè) 簡 單 的script 文 件signal: if lockf $1 echo “Error: Another $1 is running.” fi- 這 樣 我 們 在 運(yùn) 行 文 本 編 輯 器dtpad 時(shí), 輸 入 下
12、 列 命 令:- signal dtpad- 反 過 來, 對 于 前 面 提 到 的netscape 程 序, 也 可 以 通 過 編 寫 一 個(gè)script 文 件supernet 實(shí) 現(xiàn)運(yùn) 行:netscape &rm /.netscape/lock- 注1: 還 有 一 種 方 法, 只 適 用 于 普 通 用 戶: 在creat 創(chuàng) 建 一 個(gè) 新 文 件 時(shí), 即 使 權(quán) 限 實(shí)ment 不 允 許 寫, 該 文 件 也 被 打 開 用 作 寫。 但creat 在 截 斷 一 個(gè) 現(xiàn) 存 文 件 時(shí), 若 無 寫 權(quán)限n, 則 失 敗。 這 樣 就 可 以 只 通 過cre
13、at 系 統(tǒng) 調(diào) 用 實(shí) 現(xiàn) 文 件 信 號 燈 機(jī) 制。 但 這 種做 法 有 一點(diǎn), 就 是 不 適 用 于 超 級 用 戶, 因 為 對 于 超 級 用 戶 沒 有 不 允 許 寫 的 東 西。- 注2: 這 不 適 于 帶& 符 號 的 后 臺 進(jìn) 程。- UNIX 系 統(tǒng) 的 文 件 信 號 燈 機(jī) 制- 作 為 一 個(gè) 多 用 戶、 多 任 務(wù) 的 操 作 系 統(tǒng),UNIX 允 許 某 個(gè) 程 序 同 時(shí) 運(yùn) 行 多 個(gè) 進(jìn) 程。 但統(tǒng) 資 源 等 因 素 的 制 約, 要 求 一 次 只 能 有 一 個(gè) 進(jìn) 程 在 運(yùn) 行。 例 如 在Digital UNIX 下 運(yùn)行
14、第程 時(shí), 系 統(tǒng) 報(bào) 告 如 下 錯(cuò) 誤 信 息:- Netscape has detected a /.netscape/lock file.- This may indicate that another user is running Netscape using your /.netscape files.- 實(shí) 際 上, 第 一 個(gè)Netscape 進(jìn) 程 在 運(yùn) 行 時(shí), 加 了 一 把 鎖, 禁 止 其 他Netscape 進(jìn) 程 啟 動。 當(dāng)鎖 打 開, 其 他 進(jìn) 程 才 能 進(jìn) 入。 這 就 是UNIX 的 信 號 燈 機(jī) 制。- 而Netscape 是 用 文 件 作
15、為 信 號 燈 的。 在 運(yùn) 行 前, 先 檢 查 文 件/.netscape/lock 是 否 存 在:鎖 已 掛 上, 新 進(jìn) 程 不 能 運(yùn) 行, 只 好 等 待; 若 沒 有, 說 明 鎖 已 打 開, 可 以 運(yùn) 行 了。- 在 掌 握 了 文 件 信 號 燈 的 機(jī) 理 后, 可 以 自 行 設(shè) 計(jì) 一 套 萬 能 加 鎖 解 鎖 程 序, 為 每 個(gè)的 鎖 和 鑰 匙。 并 且 使 用 零 字 節(jié) 長 度 的 文 件 當(dāng) 鎖, 減 少 系 統(tǒng) 開 銷。- 我 們 用creat 和unlink 兩 個(gè) 系 統(tǒng) 調(diào) 用 實(shí) 現(xiàn) 加 解 鎖 和 檢 測 操 作。 一 個(gè) 進(jìn) 程 運(yùn) 行
16、 之 前, 先鎖 文 件 是 否 存 在 注1。unlink 系 統(tǒng) 調(diào) 用 從 一 個(gè) 目 錄 中 刪 去 一 個(gè) 文 件 鏈, 若 成 功 則 返 回0,存 在; 若 失 敗, 表 明 文 件 不 存 在, 返 回-1。 如 果 還 沒 有 上 鎖, 就 要 用creat 系 統(tǒng) 調(diào) 用 創(chuàng)建已 掛 上, 雖 然 進(jìn) 程 并 未 運(yùn) 行, 但 unlink 無 疑 會 刪 除 鎖 文 件, 所 以 也 要 用creat 來 恢 復(fù)。cr 建 一 個(gè) 新 文 件, 函 數(shù) 標(biāo) 題 如 下:int creat(path, perms /* create file */char *path; /
17、* path name */int perms; /* permission bits */- 其 中path 表 示 路 徑 加 文 件 名,perms 是10 位 的 文 件 權(quán) 限 描 述 字, 在 加 鎖 程 序 中 取0。 文時(shí), 初 始 長 度 為 零 字 節(jié), 用 它 來 做 鎖 文 件, 可 以 最 大 限 度 地 降 低 系 統(tǒng) 開 銷。- 鎖 文 件 規(guī) 定 為: 源 文 件 名+“.lok”。 這 樣 一 來, 就 真 正 做 到 了 一 個(gè) 程 序 配 一 把 鎖。- 下 面 就 列 出 加 鎖 和 解 鎖 的 程 序 清 單。 我 們 用 同 樣 的 程 序 完 成 這 兩 種 完 全 互 斥 的于 命 令 名 的 不 同。 在C 語 言 源 程 序 里, 變 量argv0 表 示 命 令 名,“l(fā)ockf” 是 上 鎖,“unlockf- 程 序LOCKF.C 暨UNLOCKF.C 的 源 代 碼#include < stdio.h >#include < errno.h >#include < fcntl.h >#include < cdatyp.h >void syserr(msg /*打印系統(tǒng)調(diào)用錯(cuò)誤信息并中止 */char *m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025聯(lián)營合同(半緊密型) 管理資料
- 2025建安公司ERP系統(tǒng)與中國長安財(cái)務(wù)共享中心系統(tǒng)集成開發(fā)合同
- 課題申報(bào)參考:立德樹人視域下大學(xué)英語教材育人效果評估與機(jī)理研究
- 課題申報(bào)參考:科技創(chuàng)新、現(xiàn)代化產(chǎn)業(yè)體系與高水平對外開放研究
- 遠(yuǎn)程學(xué)習(xí)中的學(xué)生自我管理能力
- 教育科技助力下的團(tuán)隊(duì)游戲化學(xué)習(xí)模式
- 科技驅(qū)動下的學(xué)校建筑設(shè)計(jì)新思路
- 跨領(lǐng)域?qū)嶒?yàn)教學(xué)合作模式探索
- 江西省吉安市2024-2025學(xué)年七年級上學(xué)期1月期末綜合道德與法治試題(含答案)
- 二零二五年度智能物流系統(tǒng)承攬合同GF2024版規(guī)范4篇
- 《醫(yī)院財(cái)務(wù)分析報(bào)告》課件
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報(bào)告
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 《人工智能基礎(chǔ)》全套英語教學(xué)課件(共7章)
- GB/T 35613-2024綠色產(chǎn)品評價(jià)紙和紙制品
- 2022-2023學(xué)年五年級數(shù)學(xué)春季開學(xué)摸底考(四)蘇教版
- 【螞蟻保】2024中國商業(yè)醫(yī)療險(xiǎn)發(fā)展研究藍(lán)皮書
- 軍事理論-綜合版智慧樹知到期末考試答案章節(jié)答案2024年國防大學(xué)
評論
0/150
提交評論