亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 12.htm

?? UNIX環境下C編程的詳細詳細介紹
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
</p>

<p>多精靈進程都把它們的進程ID寫到一個它們各自專用的一個PID文件上。當系統停 
</p>

<p>機時,可以從這些文件中取用這些精靈進程的進程ID。防止一個精靈進程有多份副 
</p>

<p>本同時運行的方法是:在精靈進程開始運行時,在它的進程ID文件上企圖設置一把 
</p>

<p>寫鎖。如果在它運行時一直保持這把鎖,則就不可能再起動它的其它副本。程序1 
</p>

<p>2.5實現了這一技術。 </p>

<p>因為進程ID文件可能包含以前的精靈進程ID,而且其長度還可能長于當前進程的I 
</p>

<p>D,例如該文件中以前的內容可能是12345\n,而現在的進程ID是654,我們希望該 
</p>

<p>文件現在只包含654\n,而不是654\n5,所以在寫該文件時,先將其截短為0。注意 
</p>

<p>,要在設置了鎖之后再調用截短文件長度的函數ftruncate。在調用open時不能指 
</p>

<p>定O_TRUNC,因為這樣做會在有一個這種精靈進程運行并對該文件加了鎖時也會使 
</p>

<p>該文件截短為0。(如果使用強制性鎖而不是建議性鎖,則可使用O_TRUNC。在本節 
</p>

<p>最后部分將討論強制性鎖。) </p>

<p>在本實例中,也對該描述符設置exec時關閉(close-on-exec)標志。這是因為精 
</p>

<p>靈進程常常fork并exec其它進程,無需在另一個進程中使該文件也處在打開狀態。 
</p>

<p>#include &lt;sys/types.h&gt; </p>

<p>#include &lt;sys/stat.h&gt; </p>

<p>#include &lt;errno.h&gt; </p>

<p>#include &lt;fcntl.h&gt; </p>

<p>#include &quot;ourhdr.h&quot; </p>

<p>#define PIDFILE &quot;daemon.pid&quot; </p>

<p>int </p>

<p>main(void) </p>

<p>{ </p>

<p>int fd, val; </p>

<p>char buf[10]; </p>

<p>if ( (fd = open(PIDFILE, O_WRONLY | O_CREAT, FILE_MODE)) &lt; 0) </p>

<p>err_sys(&quot;open error&quot;); </p>

<p>/* try and set a write lock on the entire file */ </p>

<p>if (write_lock(fd, 0, SEEK_SET, 0) &lt; 0) { </p>

<p>if (errno == EACCES || errno == EAGAIN) </p>

<p>exit(0); /* gracefully exit, daemon is already ru </p>

<p>ning */ </p>

<p>else </p>

<p>err_sys(&quot;write_lock error&quot;); </p>

<p>} </p>

<p>/* truncate to zero length, now that we have the lock */ </p>

<p>if (ftruncate(fd, 0) &lt; 0) </p>

<p>err_sys(&quot;ftruncate error&quot;); </p>

<p>/* and write our process ID */ </p>

<p>sprintf(buf, &quot;%d\n&quot;, getpid()); </p>

<p>if (write(fd, buf, strlen(buf)) != strlen(buf)) </p>

<p>err_sys(&quot;write error&quot;); </p>

<p>/* set close-on-exec flag for descriptor */ </p>

<p>if ( (val = fcntl(fd, F_GETFD, 0)) &lt; 0) </p>

<p>err_sys(&quot;fcntl F_GETFD error&quot;); </p>

<p>val |= FD_CLOEXEC; </p>

<p>if (fcntl(fd, F_SETFD, val) &lt; 0) </p>

<p>err_sys(&quot;fcntl F_SETFD error&quot;); </p>

<p>/* leave file open until we terminate: lock will be held */ </p>

<p>/* do whatever ... */ </p>

<p>exit(0); </p>

<p>} </p>

<p>程序12.5 精靈進程阻止其多份副本同時運行的起動代碼 </p>

<p>實例 </p>

<p>在相對文件尾端加鎖或解鎖時需要特別小心。大多數實現按照I_whence的SEEK_CU 
</p>

<p>R或SEEN_END值,用文件當前位置或當前長度以及l_start得到絕對的文件位移量。 
</p>

<p>但是,通常我們需要相對于文件的當前位置或當前長度指定一把鎖。 
</p>

<p>程序12.6寫一個文件,一次一個字節。每次循環中,從文件當前尾端開始處加鎖直到 
</p>

<p>將來可能擴充到的尾端為止(最后一個參數,長度,指定為0),然后寫1個字節。 
</p>

<p>然后解除這把鎖,寫另一個字節。如果系統用&quot;從當前尾端開始,直到將來可能擴 
</p>

<p>充的尾端&quot;這種記法來跟蹤鎖,那么這段程序能夠正常工作。但是如果系統將相對 
</p>

<p>位移量變換成絕對位移量就會有問題。在SVR4中運行此程序的確會發生問題: 
</p>

<p>#include &lt;sys/types.h&gt; </p>

<p>#include &lt;sys/stat.h&gt; </p>

<p>/* set close-on-exec flag for descriptor */ </p>

<p>if ( (val = fcntl(fd, F_GETFD, 0)) &lt; 0) </p>

<p>err_sys(&quot;fcntl F_GETFD error&quot;); </p>

<p>val |= FD_CLOEXEC; </p>

<p>if (fcntl(fd, F_SETFD, val) &lt; 0) </p>

<p>err_sys(&quot;fcntl F_SETFD error&quot;); </p>

<p>/* leave file open until we terminate: lock will be held */ </p>

<p>/* do whatever ... */ </p>

<p>exit(0); </p>

<p>} </p>

<p>程序12.5 精靈進程阻止其多份副本同時運行的起動代碼 </p>

<p>實例 </p>

<p>在相對文件尾端加鎖或解鎖時需要特別小心。大多數實現按照I_whence的SEEK_CU 
</p>

<p>R或SEEN_END值,用文件當前位置或當前長度以及l_start得到絕對的文件位移量。 
</p>

<p>但是,通常我們需要相對于文件的當前位置或當前長度指定一把鎖。 
</p>

<p>程序12.6寫一個文件,一次一個字節。每次循環中,從文件當前尾端開始處加鎖直到 
</p>

<p>將來可能擴充到的尾端為止(最后一個參數,長度,指定為0),然后寫1個字節。 
</p>

<p>然后解除這把鎖,寫另一個字節。如果系統用&quot;從當前尾端開始,直到將來可能擴 
</p>

<p>充的尾端&quot;這種記法來跟蹤鎖,那么這段程序能夠正常工作。但是如果系統將相對 
</p>

<p>位移量變換成絕對位移量就會有問題。在SVR4中運行此程序的確會發生問題: 
</p>

<p>#include &lt;sys/types.h&gt; </p>

<p>#include &lt;sys/stat.h&gt; </p>

<p>#include &lt;fcntl.h&gt; </p>

<p>#include &quot;ourhdr.h&quot; </p>

<p>int </p>

<p>main(void) </p>

<p>{ </p>

<p>int i, fd; </p>

<p>if ( (fd = open(&quot;temp.lock&quot;, O_RDWR | O_CREAT | O_TRUNC, </p>

<p>FILE_MODE)) &lt; 0) </p>

<p>err_sys(&quot;open error&quot;); </p>

<p>for (i = 0; i &lt; 1000000; i++) { /* try to write 2 Mbytes */ </p>

<p>/* lock from current EOF to EOF */ </p>

<p>if (writew_lock(fd, 0, SEEK_END, 0) &lt; 0) </p>

<p>err_sys(&quot;writew_lock error&quot;); </p>

<p>if (write(fd, &amp;fd, 1) != 1) </p>

<p>err_sys(&quot;write error&quot;); </p>

<p>if (un_lock(fd, 0, SEEK_END, 0) &lt; 0) </p>

<p>err_sys(&quot;un_lock error&quot;); </p>

<p>if (write(fd, &amp;fd, 1) != 1) </p>

<p>err_sys(&quot;write error&quot;); </p>

<p>} </p>

<p>exit(0); </p>

<p>賦與l_start)改換成所寫字節數的負值(在本程序中是-1)。這就使得un_lock去 
</p>

<p>除上次加的鎖。 </p>

<p>建議性鎖和強制性鎖 </p>

<p>考慮數據庫存取例程序。如果該庫中所有函數都以一致的方法處理記錄鎖,則我們 
</p>

<p>稱使用這些函數存取數據庫的任何進程集為合作進程。如果這些函數是唯一的用來 
</p>

<p>存取數據庫的函數,那么它們使用建議性鎖是可行的。但是建議性鎖并不能阻止對 
</p>

<p>數據庫文件有寫許可權的任何其它進程寫數據庫文件。不使用協同一致的方法(數 
</p>

<p>據庫存取例程庫)來存取數據庫的進程是一個非合作進程。 </p>

<p>強制性鎖機制中,系統核對每一個open、read和write都要檢查調用進程對正在存 
</p>

<p>取的文件是否違背了某一把鎖的作用。 </p>

<p>對一個特定文件打開其設置_組_ID位,關閉其組_執行位則對該文件啟動了強制性 
</p>

<p>鎖機制。(回憶程序4.4)。因為當組_ 執行位關閉時,設置_組_ID位不再有意義 
</p>

<p>,所以SVR3的設計者借用兩者的這種組合來指定對一個文件的鎖是強制性的而非建 
</p>

<p>議性的。 </p>

<p>如果一個進程試圖讀、寫一個強制性鎖起作用的文件,而欲讀、寫的部分又由其它 
</p>

<p>進程加上了讀、寫鎖,此時會發生什么呢?對這一問題的回答取決于三方面的因素 
</p>

<p>:操作類型(read或write),其它進程保有的鎖的類型(讀鎖或寫鎖),以及有 
</p>

<p>關描述符是阻塞還是非阻塞的。圖12.7顯示了這八種可能性。 </p>

<p>圖12.7 強制性鎖對其它進程讀、寫的影響 </p>

<p>除了圖12.7中的read,write函數,其它進程的強制性鎖也會對open函數產生影響。 
</p>

<p>通常,即使正在打開的文件具有強制性記錄鎖,該打開操作也會成功。下面的rea 
</p>

<p>d或write依從于圖12.7中所示的規則。但是,如果欲打開的文件具有強制性鎖(讀 
</p>

<p>鎖或寫鎖),而且open調用中的flag為O_TRUNC或O_CREAT,則不論是否指定O_NON 
</p>

<p>BLOCK,open都立即出錯返回,erron設置為EAGAIN。(對O_TRUNC情況出錯返回是有 
</p>

<p>意義的,因為其它進程對該文件持有讀、寫鎖,所以不能將其截短為0。對O_CREA 
</p>

<p>T情況在返回時也設置erron則無意義,因為該標志的意義是如果該文件不存在則創 
</p>

<p>建,由于其它進程對該文件持有記錄鎖,因而該文件肯定是存在的。) 
</p>

<p>這種處理方式可能導致令人驚異的結果。我們曾編寫過一個程序,它打開一個文件 
</p>

<p>(其mode指定為強制性鎖),然后對該文件的整體設置一把讀鎖,然后進入睡眠一 
</p>

<p>段時間。在這段睡眠時間內,用某些常規的Unix程序和操作符對該文件進行處理, 
</p>

<p>發現下列情況: </p>

<p>l 可用ed編輯程序對該文件進行編輯操作,而且編輯結果寫回磁盤!強制性記錄鎖 
</p>

<p>對此毫無影響。對ed操作進行跟蹤分析發現,ed將新內容寫到一個臨時文件中,然 
</p>

<p>后刪除原文件,最后將臨時文件名改名為原文件名。于是,發現強制性鎖機制對u 
</p>

<p>nlink函數沒有影響。 </p>

<p>在SVR4中,用truss(1)命令可以得到一個進程的系統調用跟蹤信息,在4.3+BSD中 
</p>

<p>,則使用ktrace(1)和kdump(1)命令。 </p>

<p>l 不能用vi編輯程序編輯該文件。vi可以讀該文件,但是如果試圖將新的數據寫到 
</p>

<p>該文件中,則出錯返回(EAGAIN)。如果試圖將新數據添加到該文件中,則write 
</p>

<p>阻塞。vi的這種行為與所希望的一樣。 </p>

<p>l 使用KornShell的&gt;和》算符重寫或添寫到該文件中,產生出錯信息&quot;cannot 
cre </p>

<p>at&quot;。 </p>

<p>l 在Bourne Shell下使用&gt;算符出錯,但是使用》算符則阻塞,在刪除了強制性鎖 
</p>

<p>后再繼續進行處理。(執行添加操作所產生的區別是因為:Korn 
Shell以O_CREAT </p>

<p>和O_APPEND標志打開文件,而上面已提及指定O_CREAT會產生出錯返回。但是,Bo 
</p>

<p>urne Shell在該文件已存在時并不指定O_CREAT,所以open成功,而下一個write則 
</p>

<p>阻塞。) </p>

<p>從這樣一個例子中可見,在使用強制性鎖時還需有所警惕。 </p>

<p>一個別有用心的用戶可以對大家都可讀的文件加一把讀鎖(強制性),這樣就能阻 
</p>

<p>止任何其它人寫該文件(當然,該文件應當是強制性鎖機制起作用的,這可能要求 
</p>

<p>該用戶能夠更改該文件的許可權位。)考慮一個數據庫文件,它是大家都可讀的, 
</p>

<p>并且是強制性鎖機制起作用的。如果一個別有用心的用戶對該整個文件保有一把讀 
</p>

<p>鎖,則其它進程不能再寫該文件。 </p>

<p>實例 </p>

<p>程序12.7 檢查一個系統是否支持強制性鎖機制。 </p>

<p>#include &lt;sys/types.h&gt; </p>

<p>#include &lt;sys/stat.h&gt; </p>

<p>#include &lt;sys/wait.h&gt; </p>

<p>#include &lt;errno.h&gt; </p>

<p>#include &lt;fcntl.h&gt; </p>

<p>#include &quot;ourhdr.h&quot; </p>

<p>int </p>

<p>main(void) </p>

<p>{ </p>

<p>int fd; </p>

<p>pid_t pid; </p>

<p>char buff[5]; </p>

<p>struct stat statbuf; </p>

<p>if ( (fd = open(&quot;templock&quot;, O_RDWR | O_CREAT | O_TRUNC, </p>

<p>FILE_MODE)) &lt; 0) </p>

<p>err_sys(&quot;open error&quot;); </p>

<p>if (write(fd, &quot;abcdef&quot;, 6) != 6) </p>

<p>err_sys(&quot;write error&quot;); </p>

<p>/* turn on set-group-ID and turn off group-execute */ </p>

<p>if (fstat(fd, &amp;statbuf) &lt; 0) </p>

<p>err_sys(&quot;fstat error&quot;); </p>

<p>if (fchmod(fd, (statbuf.st_mode &amp; ~S_IXGRP) | S_ISGID) &lt; 0) </p>

<p>err_sys(&quot;fchmod error&quot;); </p>

<p>TELL_WAIT(); </p>

<p>if ( (pid = fork()) &lt; 0) { </p>

<p>err_sys(&quot;fork error&quot;); </p>

<p>} else if (pid &gt; 0) { /* parent */ </p>

<p>/* write lock entire file */ </p>

<p>if (write_lock(fd, 0, SEEK_SET, 0) &lt; 0) </p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一级中文字幕一区二区| 麻豆一区二区在线| 欧美日韩免费高清一区色橹橹| 日本不卡视频在线| 一区二区三国产精华液| 国产日产欧美一区| 91精品福利在线一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 蜜臀av亚洲一区中文字幕| 国产精品每日更新| 精品欧美乱码久久久久久1区2区 | 精品一区二区三区在线播放| 一区二区三区四区高清精品免费观看| 国产无一区二区| 国产午夜精品一区二区三区四区| 欧美一区二区日韩| 制服丝袜中文字幕一区| 欧美性一二三区| 日本道精品一区二区三区 | 欧美手机在线视频| 97久久精品人人澡人人爽| 东方欧美亚洲色图在线| 成人丝袜18视频在线观看| 成人午夜精品一区二区三区| 国产不卡在线播放| 国产sm精品调教视频网站| 国产91丝袜在线观看| 国产成人欧美日韩在线电影| 国产成人在线观看| 精品一二三四区| 国产成人精品一区二区三区网站观看| 国产精品18久久久久| 国产精品一二三四五| 成人听书哪个软件好| 91免费看视频| 欧美中文字幕久久| 日韩午夜在线观看视频| 日韩欧美国产高清| 精品久久久久久最新网址| 国产精品三级av| 亚洲二区在线视频| 久久66热偷产精品| av动漫一区二区| 欧美精品乱码久久久久久| 日韩亚洲欧美一区二区三区| 久久久久久日产精品| 尤物在线观看一区| 狠狠色综合色综合网络| jiyouzz国产精品久久| 欧美视频一区二区三区在线观看| 欧美成人猛片aaaaaaa| 最新欧美精品一区二区三区| 午夜精品久久久久久| 国产不卡在线一区| 欧美一区二区视频在线观看2022 | 国产91精品露脸国语对白| 99精品国产热久久91蜜凸| 在线播放中文一区| 国产精品欧美久久久久一区二区| 亚洲一区二区在线视频| 国产91在线观看| 欧美一区二区免费观在线| 久久这里都是精品| 日本伊人午夜精品| 欧美三级中文字| 精品国产乱码91久久久久久网站| 亚洲在线视频一区| 成人激情电影免费在线观看| 日韩欧美在线1卡| 亚洲综合在线视频| 成人一区二区视频| 日韩三级视频在线看| 亚洲欧美偷拍卡通变态| 精品一区二区三区免费播放| 在线观看日韩电影| 国产日韩欧美麻豆| 午夜av一区二区三区| 色哦色哦哦色天天综合| 国产精品毛片a∨一区二区三区| 免费美女久久99| 欧美福利视频导航| 亚洲午夜电影在线观看| 91美女在线视频| 成人欧美一区二区三区| 丁香五精品蜜臀久久久久99网站| 精品国产伦理网| 精品一区二区免费| 精品99999| 国产91精品精华液一区二区三区 | 亚洲女同ⅹxx女同tv| 大胆亚洲人体视频| 久久精品一级爱片| 国产精品综合视频| 精品福利一区二区三区免费视频| 免费成人你懂的| 欧美精品一区二区在线观看| 视频一区中文字幕国产| 欧美日韩在线观看一区二区| 亚洲一区在线观看视频| 色素色在线综合| 亚洲一区欧美一区| 欧美一区午夜精品| 国产米奇在线777精品观看| 久久一留热品黄| 狠狠色狠狠色综合| 欧美激情综合在线| 99re8在线精品视频免费播放| 国产日本一区二区| 色婷婷综合久久久中文一区二区| 一区二区三区在线免费视频| 91精品国产免费| 国产精品正在播放| 中文av一区二区| 日韩欧美视频一区| 国产剧情一区在线| 亚洲激情综合网| 337p亚洲精品色噜噜| 国产激情一区二区三区| 中文字幕在线播放不卡一区| 在线亚洲高清视频| 精品一区二区三区日韩| 成人欧美一区二区三区1314| 欧美男人的天堂一二区| 国产一区二区精品久久99| 亚洲日本韩国一区| 91麻豆精品国产91| 懂色av一区二区夜夜嗨| 天堂av在线一区| 中文字幕一区二区三区av| 欧美日韩一区二区电影| 国产经典欧美精品| 亚洲国产一二三| 欧美国产一区在线| 欧美嫩在线观看| 9人人澡人人爽人人精品| 日本伊人色综合网| 亚洲人成影院在线观看| 久久久久久久久久久久电影 | 免费高清成人在线| 国产精品国产成人国产三级| 成人免费va视频| 国产精品网站在线| 久久无码av三级| 精品视频一区二区三区免费| 国产精品一区二区在线观看网站| 亚洲观看高清完整版在线观看| 精品日本一线二线三线不卡| 欧美私模裸体表演在线观看| 在线播放欧美女士性生活| 国产一区二区三区四区五区入口| 亚洲综合999| 亚洲欧美日韩国产另类专区| 久久久国际精品| 日韩久久久久久| 日韩一区二区三区高清免费看看| 一本色道a无线码一区v| 国产成a人无v码亚洲福利| 国产自产2019最新不卡| 日韩电影在线观看网站| 亚洲午夜私人影院| 亚洲人成网站色在线观看| 国产精品久久久久久久久免费相片 | 色综合久久综合中文综合网| 国产乱码精品1区2区3区| 麻豆精品在线播放| 日本亚洲欧美天堂免费| 午夜精品福利久久久| 亚洲一区av在线| 亚洲成人免费在线观看| 亚洲国产精品久久久久秋霞影院| 一区二区在线免费观看| 亚洲老妇xxxxxx| 一区二区视频在线看| 亚洲乱码中文字幕| 亚洲与欧洲av电影| 亚洲第一成人在线| 欧美草草影院在线视频| 99re这里都是精品| jlzzjlzz欧美大全| 成人性生交大合| 2017欧美狠狠色| 国产欧美一区二区精品性色| 国产成人免费xxxxxxxx| 91激情在线视频| 日韩欧美久久一区| 亚洲精品视频免费观看| 国产做a爰片久久毛片| 色成人在线视频| 国产亲近乱来精品视频| 日本va欧美va瓶| aa级大片欧美| 久久久久国产一区二区三区四区| 一区二区三区四区视频精品免费| 国产精品1区2区3区在线观看| 欧美日韩精品一区二区天天拍小说| 国产欧美一区二区三区在线看蜜臀| 日韩av成人高清| 欧美日韩一级二级三级| 亚洲精品欧美二区三区中文字幕| 国产成人福利片|