随笔分类 - C
C点滴知识
摘要:struct iovec 是一种用于分散/聚集 I/O 操作的数据结构,它允许在一次系统调用中从多个非连续内存缓冲区读取或写入多个非连续内存缓冲区。 该结构通常与 readv 和 writev 等函数一起使用。 #include <sys/uio.h> #include <fcntl.h> #inc
阅读全文
摘要:restrict关键字是C99标准引入的,它告诉编译器,某个指针是访问其所指向内存区域的唯一途径。 restrict关键字只能用于指针声明,并且必须紧跟在指针类型之后,变量名之前。 明确指针唯一性 使用restrict时,一定要确保在其作用域内,指针确实是访问内存的唯一方式。否则,编译器可能会进行错
阅读全文
摘要:C 语言中 __VA_ARGS__ 是一个可变参数的宏,是新的 C99 规范中新增的. 关于…和__VA_ARGS__ … 是在函数或宏的参数列表中使用,表示该函数或宏可以接受可变数量的参数。它用于声明函数或宏的参数,并将实际传递的参数列表与之匹配。注意,... 它不能在宏的展开中使用。 ##VA_
阅读全文
摘要:套接字选项: SO_RCVTIMEO:用来设置socket接收数据的超时时间; SO_SNDTIMEO: 用来设置socket发送数据的超时时间; 一般地,调用accept/connect/send/recv, 进程会阻塞,但是如果对端异常,进行可能无法正常退出等待。如何让这些调用自动定时退出? 可
阅读全文
摘要:unique_lock的特点: unique_lock提供了更多的控制锁的行为,比如锁超时、不锁定、条件变量等。 它是可移动的,可以拷贝、赋值、移动。 unique_lock比lock_guard更重,因为它有更多的功能,更多的开销。 支持手动解锁,而lock_guard不支持。 lock_guar
阅读全文
摘要:GNU extensions to the C language family __extension__关键字: gcc对标准C语言进行了扩展,但用到这些扩展功能时,编译器会提出警告,使用__extension__关键字会告诉gcc不要提出警告。
阅读全文
摘要:asm volatile("dmb osh" : : : "memory")是什么? arm架构有三种内存屏障,分别是: Data Memory Barrier, Data Synchronization Barrier, and Instruction Synchronization Barrie
阅读全文
摘要:C11 中的 atomic_thread_fence 函数是一种同步原语,用于在线程间强制执行内存排序约束。它为非原子操作和松弛原子操作建立内存同步顺序,而不执行实际的原子操作。这在多线程环境中尤其有用,可确保内存变化在不同线程间的适当可见性。 函数原型 void atomic_thread_fen
阅读全文
摘要:exit()函数导致子进程的正常退出,并且参数status&这个值将被返回给父进程。exit()应该是库函数。exit()函数其实是对_exit()函数的一种封装(库函数就是对系统调用的一种封装)。 _exit()函数终止调用的进程,进程所有的文件描述符(在linux中一切皆文件)都被关闭, 这个进
阅读全文
摘要:__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute) __attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数 1.
阅读全文
摘要:1:/dev/urandom和/dev/random是什么 这两个文件记录Linux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音由这几个方面组成,如内存的使用,文件的使用量,不同类型的进程数量等等,刚开机的时候系统噪音会较小。在这两个设备的差异在于:/dev/ran
阅读全文
摘要:calloc和realloc与malloc的区别 calloc和realloc的原型如下: void *calloc ( size_t num_elements, size_t element_size ); void *realloc (void *ptr, size_t new_size );
阅读全文
摘要:#include #include #include #include struct infomation{ char plate_num[16]; char time_str[32]; }; #define ROWNUM 20 #define COLUMN 5 int main(void) { int i = 0; // 20*5 ...
阅读全文
摘要:注意:基本数据类型的位数与系统有关,比如64-bit系统的int型为4B C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目。 位域的作用主要是节省内存资源,使数据结构更紧凑。 1. 一个位域必须存储在同一个字节中,不能跨两个字节,故位域的长度不能大于一个字节的
阅读全文
摘要:详细参考如下: Dangling pointer(悬垂指针、迷途指针)和 Wild pointer(野指针) 迷途指针经常出现在混杂使用malloc() 和 free() 库调用: 当指针指向的内存释放了,这时该指针就是迷途的。和前面的例子一样,一个避免这个错误的方法是在释放它的引用后将该指针的值重
阅读全文
摘要:http://www.jb51.net/article/37688.htm fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数p
阅读全文
摘要:strlen计算不包括终止符null字节的字符串长度,而sizeof则计算包括终止null字节的长度.另一个差别,strlen需要一次函数调用,而sizeof在编译时计算缓冲区长度. @2019-03-12 21:44:15 sizeof()是运算符,由于在编译时计算,因此sizeof不能用来返回动
阅读全文
摘要:有符号数和无符号数运算的时候,有符号数会自动向无符号数转换 1 #include<iostream> 2 #include<ctime> 3 #include <stdio.h> 4 #include<cstring> 5 #include<cstdlib> 6 #include <map> 7 #
阅读全文
摘要:* 和++优先级是同一级别,同一级别按照从右往左的顺序计算 所以: *p++等价于*(p++) 1 #define debug(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl 2 #include <iostream>
阅读全文
摘要:4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内
阅读全文
浙公网安备 33010602011771号