HAProxy Tips

9 篇文章 0 订阅

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为系统默认 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值