HAProxy Tips

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爲系統默認 
發佈了46 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章