1
size=(size+align+1)&-align //size 是align的整數倍
因爲size&-align等於比n*align . n*align< size.
假設align的最低位1爲第x位,那麼x-1,x-2,1位都爲0,&操作會讓這些位置0,從而保證size&-align 可以是n*align。
2
可以定義一個fd_set類型的數組。這樣的好處是可以直接操作大於sizeof(fd_set)個比特
#include<unistd.h>
#include<sys/select.h>
fd_set A[ARR_NUM];
FD_SET (i,A)//i (0~ARR_NUM*sizeof(fd_set)-1) 設置第i個bit爲1
FD_CLR (i,A)// 設置第i個bit爲0
FD_ISSET (i,A)// 判斷第i個爲0 返回0 否則1
3 vsnprintf 可以格式化字符串
int chunk_printf(struct chunk *chk, const char *fmt, ...)
{
va_list argp;
int ret;
if (!chk->str || !chk->size)
return 0;
va_start(argp, fmt);
ret = vsnprintf(chk->str, chk->size, fmt, argp);
va_end(argp);
chk->len = ret;
if (ret >= chk->size)
ret = -1;
chk->len = ret;
return chk->len;
}
4
attribute((constructor)) 在main函數之前執行,
attribute((destructor)) 在main退出之後執行
void breforemain() __attribute__((constructor));
void aftermain() __attribute__((destructor));
5 讀取當前執行文件路徑
len = readlink("/proc/self/exe", buffer, buffer_size - 1);
6 執行bin
execv(argv[0], argv); // argv[0]是執行的二進制文件,argv是執行的參數
7 讀取目錄下所有文件
int scandir(const char *dir, struct dirent ***namelist,
int(*filter)(const struct dirent *),
int(*compar)(const struct dirent **, const struct dirent **));
在HAproxy裏面的示例代碼如下
struct dirent **dir_entries = NULL;
dir_entries_nb = scandir(wl->s, &dir_entries, NULL, alphasort);
for (dir_entries_it = 0; dir_entries_it < dir_entries_nb; dir_entries_it++) {
struct dirent *dir_entry = dir_entries[dir_entries_it]; //遍歷訪問dir_entries路徑
}
//wl->s 爲需要訪問的路徑
//dir_entries爲dirent *類型的數組
//filter 爲NULL
//alphasort爲系統默認