git源碼分析

2018年11月9日 git源碼安裝

2018年11月10日 open/ssl.h找不到

2018年11月10日 安裝:https://blog.csdn.net/along_oneday/article/details/75138426

2018年11月11日

https://blog.csdn.net/sd2131512/article/details/80995832

依賴問題解決方式:http://h.farll.com/t/ubuntu-dependencies-problems/

void sanitize_stdfds(void)

/* if any standard file descriptor is missing open it to /dev/null */
void sanitize_stdfds(void)
{
	int fd = open("/dev/null", O_RDWR, 0);
	while (fd != -1 && fd < 2)
		fd = dup(fd);
	if (fd == -1)
		die_errno(_("open /dev/null or dup failed"));
	if (fd > 2)
		close(fd);
}

open("/dev/null",..)
很多程序在一開始的時候要做這樣的處理
/*
* make sure we have stdin/stdout/stderr reserved
*/
while((t = open("/dev/null",O_RDWR)) < 3 && T >= 0)
if(t >= 3) close(t)
寫入/dev/null的東西會被系統丟掉
就像註釋寫的那樣,對stdin/stdout/stderr進行保護
代碼中利用while先把文件描述符0,1,2分配出去,以後再分配
的時候就不會將stdin/stdout/stderr打開,以達到保護目的。

bindtextdomain()/textdomain() -- 設置文本域目錄及文本域文件

bindtextdomain() 和 textdomain() 函數聲明如下:
#include <libintl.h>
char * bindtextdomain (const char * domainname, const char * dirname);
char * textdomain (const char * domainname);
bindtextdomain() 用來設置文本域目錄。所謂的文本域文件就是 mo 文件,mo 文件在開發多語言軟件中會用到,比如正常打印 "hello world" 的英文,爲了在中文環境中得到相應顯示,我們將這句話翻譯爲“你好,世界”,然後將這句中文放在一個 mo 文件中,一般會將該文件放在 /usr/share/locale/zh_CN/LC_MESSAGES 中。基於性能方面的考慮,mo 文件一般會做爲二進制文件。

一般這麼使用該函數:
#define LOCALEDIR "/usr/share/locale/"      /* 設置 mo 文件所在基目錄(該目錄下會有 zh_CN, zh_TW 等等這些目錄) */
#define PACKAGE "foonly"    /* 函數的第 1 個參數 domainname */
bindtextdomain (PACKAGE, LOCALEDIR);
接着,一般會再使用 textdomain() 函數設置需要使用的文本域 ( text domain )。這些文本域之前都是經過 bindtextdomain() 指定的,再經過  textdomain() 函數設置後,那麼此後 gettext 庫(及其中的相關函數)便能找到相應的 mo 文件並操作它們。

如果程序需要用到多個 mo 文件,那麼需要使用 bindtextdomain() 函數多次,然後使用 textdomain() 來指定當前需要使用哪一個。

比如上面,我們用:
#define LOCALEDIR "/usr/share/locale/"      //設置 mo 文件所在基目錄(該目錄下會有 zh_CN, zh_TW 等等這些目錄)
#define PACKAGE "foonly"    //函數的第 1 個參數 domainname
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
來自於GetText的GNU項目,是一個做字符串根據ID替換爲另一字符串的項目
https://blog.csdn.net/moyumoyu/article/details/39957621

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章