小编cmi*_*idi的帖子

什么时候我们应该使用带括号和不带括号的sizeof

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括号和不使用括号?

c c++

16
推荐指数
2
解决办法
4015
查看次数

正确处理SSL_shutdown

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)

c c++ openssl

9
推荐指数
1
解决办法
6949
查看次数

在gcc内联asm中data32 data32 nopw%cs:0x0(%rax,%rax,1)指令是什么意思?

在为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)

c optimization x86 assembly gcc

7
推荐指数
2
解决办法
2715
查看次数

saltstack:仅在不存在的情况下创建目录

目前我有以下创建目录的规则

/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上创建一个目录.

linux salt-stack

6
推荐指数
2
解决办法
2万
查看次数

什么是标题库

我正在为我的下一个项目使用boost C++库,文档说它是一个仅头文件库.

大多数Boost库都是仅限标题的:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理.

所以我的问题是它是否意味着我不需要为这些升级库链接库,包括标题是唯一的要求?

什么是头文件库,它们与需要构建和链接到二进制文件的标准库有什么不同?

c++ boost software-distribution shared-libraries

4
推荐指数
1
解决办法
759
查看次数

sem_timedwait 与 CLOCK_MONOTONIC_RAW/CLOCK_MONOTONIC

示例代码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)

c c++ linux linux-kernel

3
推荐指数
1
解决办法
5855
查看次数

工会需要多少内存

我有以下联盟

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中最大元素的内存?

c c++

2
推荐指数
1
解决办法
540
查看次数

2对"\ 2"的区别

在尝试实现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

c security ipsec

2
推荐指数
1
解决办法
397
查看次数

saltstack:有没有办法在每次运行state.highstate时停止更新cron文件

目前我有以下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文件

linux salt-stack

1
推荐指数
1
解决办法
160
查看次数

为什么在使用 rand 生成随机数之前需要调用 srand

需要在行上调用 srandsrand(time(NULL));来设置种子rand()以生成随机数。我的问题是需要什么种子?

c c++

0
推荐指数
1
解决办法
1605
查看次数

我们可以分配一个unsigned int变量,0xFULL文字

我想了解以下两个定义之间的区别

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 c++

-1
推荐指数
2
解决办法
733
查看次数