一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Linux多進程之間LOG模塊的實現(xiàn)方式討論 | 學步園

 埕絮妞 2015-04-17

  本文討論實現(xiàn)的記錄log功能的模塊設計,以及如何實現(xiàn)對于其它模塊封裝細節(jié)實現(xiàn)信息隱藏。由于有些方面(例如項目中要求必須使用C,與遺留系統(tǒng)兼容等),只能使用C實現(xiàn),所以沒有用面向?qū)ο笳Z言C++, java, C#中類的實現(xiàn)方式。但使用了面向?qū)ο蟮乃枷耄缛绾翁峁┙涌诓僮飨嚓P屬性,如何最大程度實現(xiàn)信息隱藏等。

一. 封裝

  所有記錄log的函數(shù)在log_record.c中,那么需要考慮提供哪些函數(shù)給其它模塊調(diào)用。

  可以有三個函數(shù)

1. void log_init(char * path);                                /* 根據(jù)路徑初始化log:打開log記錄文件等*/

2. void log_print(char *file, int line, char * format, ...);  /* 通過可變參數(shù)記錄log信息 */

3. void log_end();                                            /* 程序結(jié)束后的log清理:關閉文件等 */

  這樣一來,其它模塊只需要使用這三個函數(shù)就能實現(xiàn)log的記錄功能了,具體如何實現(xiàn)就不用關心了。當然,此處函數(shù)參數(shù)已經(jīng)到了最簡。如果這三個函數(shù)之間有信息傳遞,如操作同一個文件描述符,則這個文件描述符要設置成全局變量的形式。

二. 多進程log操作,進程之間主要有兩種情況(針對2個進程,多個進程類似):

  1. 兩個進程相互獨立。
  2. 兩個進程之間有關系。(例如:在Linux中兩個進程的父子關系)

  如果兩個不同的進程有自己獨立的log記錄功能則使用上面討論的log模塊就可以完全實現(xiàn)了。但如果兩個進程使用同一個log文件呢?

例如:有一個父進程,然后 fork()出一個或多個子進程,那么這時這種實現(xiàn)方式就會有問題存在,存在同時讀寫log文件的問題。如何解決呢?

  有兩種方式可以解決

  1. 對文件加鎖
  2. 使用共享內(nèi)存,對共享內(nèi)存加鎖,當共享內(nèi)存滿了之后可以再寫入磁盤。

  對于第一種方式,文件加鎖,如果進程操作頻繁,那么顯然加鎖,寫入文件會有效率低的問題。對于第二種方式,則可以很好解決這個問題。共享內(nèi)存作為一個緩沖區(qū),可以實現(xiàn)高速讀寫,這樣一來,就解決了效率低的問題。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩精品综合免费视频| 日韩欧美综合在线播放| 九九久久精品久久久精品| 欧美一区二区三区十区| 国产精品香蕉在线的人| 国产女同精品一区二区| 又色又爽又黄的三级视频| 91人妻人人精品人人爽| 欧美欧美日韩综合一区| 国产精品人妻熟女毛片av久久| 亚洲熟女国产熟女二区三区| 成人午夜在线视频观看| 国产欧美日韩精品一区二区| 亚洲一区二区三区熟女少妇| 成年女人下边潮喷毛片免费| 一区二区三区四区亚洲另类| 五月婷婷六月丁香亚洲| 日韩成人中文字幕在线一区| 黄色日韩欧美在线观看| 91久久精品国产一区蜜臀| 欧美一区二区三区视频区| 国产成人在线一区二区三区| 亚洲欧美日本视频一区二区| 国产午夜免费在线视频| 国产亚洲二区精品美女久久| 嫩草国产福利视频一区二区| 国产三级黄片在线免费看 | 日本女优一区二区三区免费| 欧美黑人在线精品极品| 国产高清一区二区白浆| 午夜久久精品福利视频| 免费性欧美重口味黄色| 午夜视频在线观看日韩| 欧美小黄片在线一级观看| 日本黄色录像韩国黄色录像| 中文文精品字幕一区二区| 欧美日韩国产成人高潮| 好吊妞视频免费在线观看| 日本人妻中出在线观看| 久久精品亚洲情色欧美| 亚洲中文字幕人妻av|