前言 最近下載了 memcached 源碼,準(zhǔn)備研究研究。 但是下載后發(fā)現(xiàn)里面有很多庫(kù)函數(shù)自己沒(méi)見(jiàn)過(guò),于是把這些函數(shù)收集起來(lái)。 后來(lái)發(fā)現(xiàn)我知道的一些函數(shù)讀者可能還不知道,于是把不常見(jiàn)的函數(shù)都記錄下來(lái)吧。 這些函數(shù)都是看 man 的英文手冊(cè)學(xué)習(xí)的,所以可能講解
最近下載了 memcached 源碼,準(zhǔn)備研究研究。
但是下載后發(fā)現(xiàn)里面有很多庫(kù)函數(shù)自己沒(méi)見(jiàn)過(guò),于是把這些函數(shù)收集起來(lái)。
后來(lái)發(fā)現(xiàn)我知道的一些函數(shù)讀者可能還不知道,于是把不常見(jiàn)的函數(shù)都記錄下來(lái)吧。
這些函數(shù)都是看 man 的英文手冊(cè)學(xué)習(xí)的,所以可能講解的非常淺,如果想深入學(xué)習(xí),可以詢(xún)問(wèn)我或者自行 google 查資料了解。
想看原理的直接轉(zhuǎn)向 memcached 源碼閱讀之原理篇
函數(shù)的含義
abort the program if assertion is false
判斷一個(gè)值是否是 false, 如果是false 就退出。
這個(gè)函數(shù)主要用于程序員做測(cè)試。
對(duì)于某個(gè)變量應(yīng)該為某個(gè)值的時(shí)候,為了確保那個(gè)變量確實(shí)在是那個(gè)值,可以用 assert 來(lái)?yè)?dān)保。
如果那個(gè)變量出現(xiàn)意外不是規(guī)定的值,程序?qū)?huì)強(qiáng)制退出,并輸出錯(cuò)誤信息,格式如下
當(dāng)程序正式使用時(shí),就要關(guān)閉 assert 這個(gè)功能。
當(dāng)然,我們不會(huì)去一個(gè)一個(gè)的注釋。
我們可以定義一個(gè)宏 NDEBUG, 定義之后 assert 就會(huì)無(wú)效的。
頭文件與聲明
#include void assert(scalar expression); //source assert(argc > 2); //error message a.out: timedrun.c:94: int main(int, char**): Assertion `argc > 2' failed. Aborted
函數(shù)的含義
set an alarm clock for delivery of a signal
設(shè)置一個(gè)定時(shí)發(fā)送信號(hào)的 alarm
這個(gè)函數(shù)主要用于那些需要信號(hào)量的程序中。
alarm 實(shí)際上就是一個(gè)超時(shí)限制。
alarm 只能設(shè)置一個(gè),后面的會(huì)覆蓋前面的。
頭文件與聲明
#include unsigned int alarm(unsigned int seconds);
函數(shù)的含義
create a child process
創(chuàng)建一個(gè)子進(jìn)程
創(chuàng)建一個(gè)子進(jìn)程,這個(gè)子進(jìn)程的內(nèi)存空間和父進(jìn)程一樣。
但是這個(gè)子進(jìn)程和父進(jìn)程還是有一些區(qū)別的,這里不多介紹。
如果 fork 成功,子進(jìn)程的 PID 會(huì)返回給父進(jìn)程,而在子進(jìn)程中返回的是0.
如果返回 -1, 代表子進(jìn)程創(chuàng)建失敗。
頭文件與聲明
#include pid_t fork(void);
函數(shù)的含義
print a system error message
向標(biāo)準(zhǔn)錯(cuò)誤 輸出一條信息。
可以簡(jiǎn)單的理解為輸出一條信息。
頭文件與聲明
#includevoid perror(const char *s); #include const char *sys_errlist[]; int sys_nerr; int errno;
函數(shù)的含義
execute a file
執(zhí)行一個(gè)文件
就是調(diào)用另一個(gè)可執(zhí)行程序。
頭文件與聲明
#include extern char **environ; int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char * const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]);
函數(shù)的含義
examine and change a signal action
檢查和修改信號(hào) action
頭文件與聲明
#includeint sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
函數(shù)的含義
wait for process to change state
等待進(jìn)程去修改狀態(tài)
簡(jiǎn)單的說(shuō)就是等待子進(jìn)程的信號(hào)。
成功了就返回修改修改狀態(tài)的那個(gè)子進(jìn)程的 PID.
如果狀態(tài)沒(méi)有修改,返回0,錯(cuò)誤返回 -1.
WIFEXITED(status) 這個(gè)宏用來(lái)指出子進(jìn)程是否為正常退出的,如果是,它會(huì)返回一個(gè)非零值。
WEXITSTATUS(status) 當(dāng)WIFEXITED返回非零值時(shí),我們可以用這個(gè)宏來(lái)提取子進(jìn)程的返回值.
WIFSIGNALED(status)
WTERMSIG(status) 當(dāng) WIFSIGNALED 返回非零值時(shí),這個(gè)宏會(huì)導(dǎo)致子進(jìn)程結(jié)束的信號(hào)數(shù)
頭文件與聲明
#include#include pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
函數(shù)的含義
ANSI C signal handling
ANSI C 信號(hào)
設(shè)置一個(gè)信號(hào)的回調(diào)函數(shù)。
當(dāng)接受到指定信號(hào)時(shí),執(zhí)行 handler 函數(shù)。
頭文件與聲明
#includetypedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);
函數(shù)的含義
send signal to a process
給一個(gè)進(jìn)程發(fā)送信號(hào)
頭文件與聲明
#include#include int kill(pid_t pid, int sig);
函數(shù)的含義
get/set resource limits
得到最大的資源限制
頭文件與聲明
#include#include int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim);
函數(shù)的含義
get user identity
得到用戶(hù)的身份ID
頭文件與聲明
#include #includeuid_t getuid(void); uid_t geteuid(void);
函數(shù)的含義
get password file entry 得到密碼文件實(shí)體
頭文件與聲明
#include#include struct passwd *getpwnam(const char *name); struct passwd *getpwuid(uid_t uid); int getpwnam_r(const char *name, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result); int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result);
函數(shù)的含義
set group identity 設(shè)置用戶(hù)組的ID
頭文件與聲明
#include#include int setgid(gid_t gid);
函數(shù)的含義
set user identity 設(shè)置用戶(hù)的ID
頭文件與聲明
#include#include int setuid(uid_t uid);
函數(shù)的含義
POSIX signal set operations.
頭文件與聲明
#includeint sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); int sigismember(const sigset_t *set, int signum);
函數(shù)的含義
creates a session and sets the process group ID
頭文件與聲明
#include pid_t setsid(void);
函數(shù)的含義
duplicate a file descriptor
頭文件與聲明
#include int dup(int oldfd); int dup2(int oldfd, int newfd); #define _GNU_SOURCE #include int dup3(int oldfd, int newfd, int flags);
函數(shù)的含義
lock and unlock memory
頭文件與聲明
#includeint mlock(const void *addr, size_t len); int munlock(const void *addr, size_t len); int mlockall(int flags); int munlockall(void);
函數(shù)的含義
get an environment variable
頭文件與聲明
#includechar *getenv(const char *name);
原文地址:memcached 源碼閱讀之庫(kù)函數(shù)介紹, 感謝原作者分享。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com