5 Star 27 Fork 13

wei/share_open_code

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
skill_code.c 2.13 KB
一键复制 编辑 原始数据 按行查看 历史
wei 提交于 2021-09-06 23:41 +08:00 . 修改一处BUG
//记录linux的各种骚操作代码
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; \
})
/*
*其中第四行代码是为了在用户传入不同类型的变量进行比较时给出警告,前面的(void)又是为了让编译器忽略后面代码的结果
*个人理解上面的宏{}里面的内容相当于一个函数,在函数内部完成一系列操作后,通过()得到返回值
*例:
#define ret_sub(x) ({\
typeof(tmp) = 5;\
x - tmp;\
})
*/
int tmp_array[] = {[1 ... 3] = 5,[4 ... 6] = 7};
/*
*上面代码的意思是将数组1到3的元素初始化为5,4到6的元素初始化为7,注意中间的空格不能少
*/
int n;
switch(n)
{
/*写法1*/
case 1 ... 3:
break;
/*写法2*/
case 1:
case 2:
case 3:
break;
}
/*
*上面两种写法都可以将1到3的分支归为一种情况
*/
int sem_timedwait_ms(sem_t *sem, time_t msec)
{
struct timespec ts;
time_t nsec;
int ret;
nsec = msec * 1000 * 1000;
ret = 0;
do {
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_nsec += nsec;
ts.tv_sec += ts.tv_nsec / 1000000000;
ts.tv_nsec %= 1000000000;
if(sem_timedwait(sem, &ts) < 0)
{
if((errno == EINTR) || (errno == EAGAIN))
{
continue;
}
else if(errno == ETIMEDOUT)
{
ret = 1;
}
else
{
ret = -1;
}
}
break;
}while(1);
return ret;
}
int sem_timedwait_s(sem_t *sem, time_t sec)
{
struct timespec ts;
int ret;
ret = 0;
do {
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += sec;
if(sem_timedwait(sem, &ts) < 0)
{
if((errno == EINTR) || (errno == EAGAIN))
{
continue;
}
else if(errno == ETIMEDOUT)
{
ret = 1;
}
else
{
ret = -1;
}
}
break;
}while(1);
return ret;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/wei513723/share_open_code.git
git@gitee.com:wei513723/share_open_code.git
wei513723
share_open_code
share_open_code
master

搜索帮助