freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

顧客服務(wù)員程序設(shè)計(jì)要點(diǎn)(文件)

2025-08-14 00:33 上一頁面

下一頁面
 

【正文】 (int argc, char **argv){ int listenfd, connfd。 struct sockaddr *cliaddr。addrlen)。 Signal(SIGINT, sig_int)。 if ( (connfd = accept(listenfd, cliaddr, amp。 /* close listening socket */ web_child(connfd)。20世紀(jì)80年代后期,當(dāng)一個服務(wù)器一天只需處理幾百、幾千個顧客請求時(shí),這樣實(shí)現(xiàn)從性能上是能夠滿足的。 可以采用預(yù)先派生子進(jìn)程技術(shù)來提高并發(fā)服務(wù)器的性能。static pid_t *pids。 pid_t child_make(int, int, int)。addrlen)。 for (i = 0。 for ( 。而缺點(diǎn)在于:每次啟動服務(wù)器時(shí),父進(jìn)程必須確定需要產(chǎn)生多少個子進(jìn)程。因?yàn)檫^多的子進(jìn)程會占用系統(tǒng)的資源,從而導(dǎo)致系統(tǒng)性能下降。 在源自Berkeley的內(nèi)核實(shí)現(xiàn)上,父進(jìn)程在派生子進(jìn)程之前創(chuàng)建監(jiān)聽套接口,而每次fork子進(jìn)程時(shí),各個子進(jìn)程復(fù)制父進(jìn)程的全部描述字。每個file結(jié)構(gòu)有一個訪問計(jì)數(shù),它在文件或者套接口打開時(shí)為1,而每當(dāng)調(diào)用fork或者dup本描述字時(shí),它就增加1。這是由于這N個進(jìn)程共享一個socket結(jié)構(gòu),導(dǎo)致它們睡眠在同一等待通道(wait channel),即socket結(jié)構(gòu)的so_timeo成員上。為了避免驚群問題的發(fā)生,用戶不希望有額外子進(jìn)程空閑,某些Unix內(nèi)核有一個名字為wakeup_one的函數(shù),對于等待某個事件的一群進(jìn)程,它只喚醒一個等待進(jìn)程,而不是所有進(jìn)程。 為了保證守護(hù)進(jìn)程正常地工作,必須使守護(hù)進(jìn)程和其它進(jìn)程運(yùn)行的環(huán)境隔離開,避免由于其它進(jìn)程的行為影響守護(hù)進(jìn)程的工作。雖然使服務(wù)員程序在系統(tǒng)后臺運(yùn)行很容易,但是用戶還應(yīng)該使程序能自動轉(zhuǎn)到后臺運(yùn)行并且脫離與終端的聯(lián)系。例如,syslog守護(hù)進(jìn)程、inetd守護(hù)進(jìn)程、Web服務(wù)員守護(hù)進(jìn)程等等。 3. cron守護(hù)進(jìn)程按規(guī)則定期執(zhí)行一些程序,由它啟動的程序也以守護(hù)進(jìn)程的方式運(yùn)行。5. 不管是前臺還是后臺,守護(hù)進(jìn)程也可以在終端上啟動,這在調(diào)試守護(hù)進(jìn)程或守護(hù)進(jìn)程由于某種原因終止而需要重新啟動時(shí)經(jīng)常使用。 syslog守護(hù)進(jìn)程 Unix或Linux系統(tǒng)通常會從一個初始化腳本中啟動syslog守護(hù)進(jìn)程,只要系統(tǒng)運(yùn)行,它就一直運(yùn)行。2. 創(chuàng)建一個Unix域套接口,給它捆綁路徑名/var/run/log(有些系統(tǒng)為/dev/log)。如果該守護(hù)進(jìn)程收到SIGHUP信號,它將重新讀入配置文件。在syslog守護(hù)進(jìn)程的各種實(shí)現(xiàn)中存在差異,例如,源自Berkeley的實(shí)現(xiàn)使用Unix域套接口,而系統(tǒng)V使用一個基于流的登記驅(qū)動程序(是一種訪問驅(qū)動程序的方法)。守護(hù)進(jìn)程為了登記消息通常調(diào)用syslog函數(shù)。 其中priority表示消息的優(yōu)先級,message是需要記錄的內(nèi)容。表44 syslog消息優(yōu)先級優(yōu)先級(level)值描述LOG_EMERG0系統(tǒng)不可用(優(yōu)先級最高)LOG_ALERT1必須立即進(jìn)行處理LOG_CRIT2危險(xiǎn)情況LOG_ERR3出錯情況LOG_WARNING4警告性情況LOG_NOTICE5常見但值得注意的情況(缺?。㎜OG_INFO6通告消息LOG_DEBUG7調(diào)試消息(優(yōu)先級最低) 登記消息還包含一個標(biāo)識發(fā)送消息進(jìn)程的類型的設(shè)施。 設(shè)施和級別的目的是,允許在/etc/,使得對相同設(shè)施的消息得到同樣的處理,或者相同級別的消息得到同樣的處理。另外,進(jìn)程也可以調(diào)用openlog和closelog。 ident是一個字符串,它將被syslog加到每條登記記錄的前面,一同被記錄。LOG_NDELAY選項(xiàng)能使套接口在調(diào)用openlog時(shí)創(chuàng)建。例如,在shell腳本中可以用它向syslog發(fā)送消息。 pid_t pid。 if ( (pid = Fork()) != 0) exit(0)。 /* clear our file mode creation mask */ for (i = 0。} 在這個程序中有幾點(diǎn)需要說明:1. 為出錯處理函數(shù)設(shè)置標(biāo)識:程序中將全局變量daemon_proc設(shè)成非0。例如,打印機(jī)守護(hù)進(jìn)程可能會把工作目錄改為打印機(jī)的假脫機(jī)處理(spool)目錄,即它工作時(shí)要使用的目錄。3. 關(guān)閉所有打開的文件描述符:關(guān)閉本守護(hù)進(jìn)程從運(yùn)行它的進(jìn)程(通常為shell)繼承而來的所有打開的文件描述符。有些守護(hù)進(jìn)程以讀寫方式打開/dev/null,并將它復(fù)制到標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出。4. 用syslogd處理錯誤:調(diào)用openlog。守護(hù)進(jìn)程運(yùn)行時(shí)沒有控制終端,所以它不會收到來自內(nèi)核的SIGHUP信號。 為了避免這種干擾,用戶可以使用某種互斥的手段,使得系統(tǒng)中沒有兩個相同的守護(hù)進(jìn)程同時(shí)運(yùn)行。圖411說明了這個思想。)Y文件是否存在?進(jìn)程退出N創(chuàng)建文件……進(jìn)程退出刪除文件圖411 創(chuàng)建文件的方法避免多副本 用戶可以使用鎖文件的方式取代判定創(chuàng)建文件的方法,兩者雖然思路相似,但因?yàn)閷ξ募募渔i,將在系統(tǒng)崩潰時(shí)自動釋放,所以加鎖的方法更加有效。UDP協(xié)議),然后執(zhí)行fork。:inetd守護(hù)進(jìn)程使這些問題得到簡化?;赥CP或者UDP的服務(wù)器都可以使用這個守護(hù)進(jìn)程。這避免了每個服務(wù)器程序都要調(diào)用daemon_init函數(shù)。這個文本文件規(guī)定了這個超級服務(wù)員要接收哪些請求,收到這些請求后又要提供哪些服務(wù)。3. 使用的協(xié)議類型(protocol):即TCP協(xié)議或者UDP協(xié)議。5. 用戶名(login_name):服務(wù)器將以該用戶名對應(yīng)的權(quán)限運(yùn)行進(jìn)程。7. 程序的參數(shù)(server_program_arguments):inetd將在exec函數(shù)中使用這行參數(shù)。 (2)生成每一個管座后要執(zhí)行bind,為該服務(wù)員指定一個眾所周知的地址。 (3)對于流管座要執(zhí)行l(wèi)isten,表示希望在該管道上接收連接,并指定用于輸入連接的隊(duì)列的長度。在這一步,inetd守護(hù)程序只是等待select系統(tǒng)調(diào)用返回。這樣,在子進(jìn)程上只打開文件描述符0、l、2,然后它調(diào)用getpwnam,獲得在/etc/。父進(jìn)程再一次執(zhí)行select系統(tǒng)調(diào)用,等待下一個管座變?yōu)榭勺x。例如,在 IPv6與/etc/。守護(hù)進(jìn)程的所有輸出通常是調(diào)用syslog函數(shù)發(fā)送給syslogd守護(hù)進(jìn)程。這樣接不必在調(diào)用socket、bind、listenhe 和accept了,因?yàn)檫@些操作inetd已經(jīng)完成。 多數(shù)Unix服務(wù)器是由inetd守護(hù)進(jìn)程啟動的。 守護(hù)進(jìn)程是在后臺運(yùn)行的,獨(dú)立于所有終端控制的進(jìn)程。以及處理除TCP和UDP外其它協(xié)議的能力。如果對于同一個服務(wù)員又有另一個連接請求到達(dá),它執(zhí)行select之后立即回到父進(jìn)程,上面所列的步驟又重做一遍,由另一個子進(jìn)程來處理這個新的服務(wù)請求?,F(xiàn)在,子進(jìn)程用exec執(zhí)行適當(dāng)?shù)姆?wù)員程序來處理服務(wù)請求,傳送在結(jié)構(gòu)文件中的指定的一些變元。 (6)fork,并且由子進(jìn)程來處理這個服務(wù)請求。 (4)執(zhí)行select,等待第一個管座變?yōu)榭勺x入。對應(yīng)于上面所列的結(jié)構(gòu)文件中的4行,在這個文件中有如下4行: ftp 21/tcp telnet 23/tcp tftp 69/udp login 513/tcp /etc/。由于inetd所用的文件描述符總數(shù)不能超過系統(tǒng)規(guī)定的上限值,所以inetd可以等候的服務(wù)員的數(shù)量也有一定限制。inetd將根據(jù)這個記錄在exec加載子進(jìn)程時(shí)修改進(jìn)程的運(yùn)行權(quán)限。4. 等待狀態(tài)(wait_flag):如果指定為nowait,超級服務(wù)器將允許指定的服務(wù)并發(fā),它將在本次服務(wù)未完成時(shí),啟動下一次服務(wù)??梢粤谐鰩仔凶鳛槔樱? ftp stream tcp nowait root /etc/ftpd ftpd telnet stream tcp nowait root /etc/telnetd telnetd login stream tcp nowait root /etc/rlogind rlogindtftp dgram udp wait nobody /etc/tftpd tftpd字 段描 述service_name必須在/etc/services中socket_typestream或dgramprotocol必須在/etc/protocol(TCP或UDP)中wait_flagWait或nowaitlogin_name取自/etc/passwd文件中,通常為rootserver_program至exec的完整路徑名server_program_arguments最多五個變元圖412 inetd結(jié)構(gòu)文件中的字段 /etc/:1. 服務(wù)名稱(service_name):這個服務(wù)名稱必須在/etc/services中定義。這樣減少了系統(tǒng)中的進(jìn)程總數(shù),并縮小了資源開銷。該守護(hù)進(jìn)程解決了上面提到的兩個問題。是因?yàn)樗軌蛱幚矶喾N網(wǎng)絡(luò)服務(wù)。該模型有兩個問題:1. 這些守護(hù)進(jìn)程都以幾乎相同的啟動代碼工作,首先是創(chuàng)建套接口,還要考慮變成守護(hù)進(jìn)程(與daemon_init函數(shù)類似)。這些服務(wù)都有一個與之對應(yīng)的進(jìn)程。要使守護(hù)進(jìn)程正常運(yùn)行,就需要在它運(yùn)行之前將該文件刪除。否則,如果進(jìn)程發(fā)現(xiàn)文件還沒有被創(chuàng)建,則它將繼續(xù)執(zhí)行。另外兩個守護(hù)進(jìn)程不應(yīng)該收到的信號是SIGINT和SIGWINCH,這些信號也可以用作通知守護(hù)進(jìn)程一些其它事項(xiàng)。這里的設(shè)置將進(jìn)程號加到每條登記消息中。之所以要打開這些描述符是因?yàn)椋@樣做守護(hù)進(jìn)程調(diào)用的那些假定能使用標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出的庫函數(shù)就不會發(fā)生問題。有方法能夠得到一個進(jìn)程能打開的最大的描述字?jǐn)?shù)目,但由于這個限制可能是無限的,所以確定最大描述字本身機(jī)也變得復(fù)雜。改變工作目錄的另一個原因是守護(hù)進(jìn)程可能在任意文件系統(tǒng)中啟動,如果保持工作目錄不變,該文件系統(tǒng)就不能拆卸(unmount)。這樣用戶不必從頭到尾改程序,就可以讓服務(wù)器在以非守護(hù)進(jìn)程方式運(yùn)行時(shí)(測試服務(wù)器時(shí))調(diào)用一個自己的出錯處理函數(shù),而在以守護(hù)進(jìn)程方式運(yùn)行時(shí)調(diào)用syslog。 i++) close(i)。 /* for our err_XXX() functions */ chdir(/)。 /* parent terminates */ /* 1st child continues */ setsid()。include include define MAXFD 64extern int daemon_proc。一些守護(hù)進(jìn)程調(diào)用openlog設(shè)置設(shè)施(它在一個進(jìn)程中通常不變),然后在調(diào)用syslog時(shí)只設(shè)置級別(因?yàn)榧墑e會隨錯誤而改變)。表46 函數(shù)openlog的選項(xiàng)選項(xiàng)(options)描述LOG_CONS如果不能發(fā)往syslog,則登記到控制臺LOG_NDELAY不延遲打開,立即創(chuàng)建套接口LOG_PERROR既發(fā)往syslog,又登記到標(biāo)準(zhǔn)錯誤輸出LOG_PID登記每條消息的進(jìn)程ID 通常調(diào)用openlog函數(shù)時(shí)并不創(chuàng)建Unix域套接口。具體使用方法如下: include void openlog(const char *ident, int options, int facility)。 當(dāng)應(yīng)用程序第一次調(diào)用syslog時(shí),它創(chuàng)建一個Unix域數(shù)據(jù)報(bào)套接口,然后調(diào)用connect連往syslogd守護(hù)進(jìn)程建立的套接口的眾所周知路徑名(例如/var/run/log)。如果沒有指定設(shè)施,缺省為LOG_USER。登記消息的級別可以從0到7,它們是按從高到低的順序排列。 盡管syslog函數(shù)最初是BSD系統(tǒng)開發(fā)的,但目前絕大多數(shù)Unix廠商都提供。但是如果使用syslog函數(shù)就可以忽略這些細(xì)節(jié)問題。另外也可以創(chuàng)建一個UDP套接口,將日志消息發(fā)到回饋地址及端口514。4. 打開路徑名/dev/klog,內(nèi)核中的所有出錯消息作為這個設(shè)備的輸入出現(xiàn)。它設(shè)定守護(hù)進(jìn)程對接收每次鍵入的各種登記消息(log message)怎樣處理。這些消息既有一般的通告消息,也有需要管理員處理的緊急事件消息。4. 可以用at命令指定在將來的某個時(shí)刻執(zhí)行程序。inetd自身是
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1