typedef struct rem{
int addr;
char addrbuf[32];
} foo;
Run Code Online (Sandbox Code Playgroud)
这两个代码都返回相同的结果
foo addr;
printf("size is: %d\n",sizeof addr);
printf("size is: %d\n",sizeof (foo));
Run Code Online (Sandbox Code Playgroud)
大小是:36
大小是:36
但是什么时候我们应该使用sizeof括号和不使用括号?
SSL_shutdown上的openssl文档指出:因此,如果双向关闭尚未完成(第一次调用的返回值为0),建议检查SSL_shutdown()的返回值并再次调用SSL_shutdown().
https://www.openssl.org/docs/ssl/SSL_shutdown.html
我在下面有一个代码片段,我从SSL_shutdown检查返回值0并再次调用它,我一直在使用它.我的问题是,可以忽略第二次调用时SSL_shutdown的返回值,或者我们应该继续重试SSL_shutdown,直到返回1(双向关闭完成).
int r = SSL_shutdown(ssl);
//error handling here if r < 0
if(!r)
{
shutdown(fd,1);
SSL_shutdown(ssl); //how should I handle return value and error handling here is it required??
}
SSL_free(ssl);
SSLMap.erase(fd);
shutdown(fd,2);
close(fd);
Run Code Online (Sandbox Code Playgroud) 在为gcc编译器的-O2优化运行一些测试时,我在反汇编代码中观察到以下指令:
data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
Run Code Online (Sandbox Code Playgroud)
这个指令做了什么?
为了更详细,我试图了解编译器如何使用O2优化优化无用的递归,如下所示:
int foo(void)
{
return foo();
}
int main (void)
{
return foo();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在没有优化的情况下编译时导致堆栈溢出,但适用于O2优化代码.
我认为使用O2它完全删除了推送函数foo的堆栈,但为什么data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)需要?
0000000000400480 <foo>:
foo():
400480: eb fe jmp 400480 <foo>
400482: 66 66 66 66 66 2e 0f data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
400489: 1f 84 00 00 00 00 00
0000000000400490 <main>:
main():
400490: eb fe jmp 400490 <main>
Run Code Online (Sandbox Code Playgroud) 目前我有以下创建目录的规则
/init/dir:
file.recurse:
- source: salt://init_dir/init
- user: name
- group: group
- name: /path/init
- dir_mode: 2775
- file_mode: 777
Run Code Online (Sandbox Code Playgroud)
现在我想只在目录不存在的情况下才在新的minions上创建一个目录.
我正在为我的下一个项目使用boost C++库,文档说它是一个仅头文件库.
大多数Boost库都是仅限标题的:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理.
所以我的问题是它是否意味着我不需要为这些升级库链接库,包括标题是唯一的要求?
什么是头文件库,它们与需要构建和链接到二进制文件的标准库有什么不同?
示例代码int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);用作CLOCK_REALTIME时间源,clock_gettime(struct timespec *timeout) 但这很容易受到系统时钟时间更改的影响,例如某些其他进程会向后更改时间。
是否支持sem_timedwait支持CLOCK_MONOTONIC时间源
下面是一些示例代码供参考。
struct timespec ts;
sem_t sema;
sem_init(&sema, 0, 0)
int ret;
if ( -1 != (ret = clock_gettime(CLOCK_REALTIME, &ts))){
ts.tv_sec += 1;
return sem_timedwait(sema, &ts);
}
Run Code Online (Sandbox Code Playgroud) 我有以下联盟
typedef union rem{
int addr;
char addrbuf[32];
} foo;
Run Code Online (Sandbox Code Playgroud)
union上的sizeof提供以下输出
foo addr;
printf("size is: %d\n",sizeof addr);
Run Code Online (Sandbox Code Playgroud)
大小是:32
这是否意味着union在定义时分配或需要等于union中最大元素的内存?
在尝试实现IKE会话密钥生成算法时,我遇到了以下代码片段,用于以下算法实现,用于生成特定会话密钥的算法
SKEYID_e = HMAC (SKEYID, SKEYID_a || gxy || CKY-I || CKY-R || 2)
实现以获得数字2的最后连接HMAC
hmac_update(ctx, (unsigned char *) "\2", 1)
这里hmac_update是用于连接缓冲区以在最终确定摘要之前获取HMAC的API,而CTX是HMAC上下文"\ 2"正在添加数字2和1是缓冲区的大小.
我的问题是和转义unsigned char * "\2"和char/ uint8_t值之间的区别是什么2
目前我有以下cron.file公式
date > system_cron:
cron.file:
- name: salt://crons/cron_jobs
- source_hash: "md5sum=895dcbbddd27bfa77056ef8c8340549a"
- user: security
Run Code Online (Sandbox Code Playgroud)
但是每次运行highstate时都会更新crontab,尽管cron_jobs文件没有改变,因此状态是相同的.有没有办法在每次使用cron.file时运行highstate时停止创建temp crontab文件
需要在行上调用 srandsrand(time(NULL));来设置种子rand()以生成随机数。我的问题是需要什么种子?
我想了解以下两个定义之间的区别
unsigned long long id = 0x0FULL; //should be correct
unsigned int store = 0X0FULL; // ?? Can this be done
printf("id is : 0x%llx store is : 0x%x\n",id,store);
Run Code Online (Sandbox Code Playgroud)
两个变量的输出返回相同的值
id is : 0xf store is : 0xf
Run Code Online (Sandbox Code Playgroud) c ×8
c++ ×7
linux ×3
salt-stack ×2
assembly ×1
boost ×1
gcc ×1
ipsec ×1
linux-kernel ×1
openssl ×1
optimization ×1
security ×1
x86 ×1