1 __LINE__ 在源代码中插入当前源代码行号
__FILE__ 在源代码中插入当前源代码文件名
__DATE__ 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕
__TIME__ 在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕
__STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。
__cplusplus
标识符__LINE__和__FILE__通常用来调试程序;
标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;
这里一定要注意 前后均是两个_,别被假象迷惑了。否则引入了stdio.h,编译器也是不认识他们的。
2关于volatile.
在c中,变量用volatile进行定义,表示告诉编译器,你不 要自作聪明,进行编译优化,(编译器从该变量获取相应的值后,会自作聪明的进行优化,不在访问该变量所在的
内存地址,进行读取变量的数值,而是直接凭借上次的数值再次读取。)
因此有了volatile,编译器会乖乖的都从该变量存储的地址读取该变量值,保证了变量值的实时。
因此在并行设备的寄存器,中断程序会访问的全局变量,多线程中被共享的变量。
上述的三个场景都是需要我们特别小心的。尽量使用关键字volatile进行修饰。
3关于linux中的数据重定向
1> 以覆盖的方式将正确的数据输出到指定的文件或者设备上
1>>以累加的方式将正确的数据输出到指定的文件或者设备上
2>以覆盖的方式将错误的信息输出到指定的文件或者设备上
2>>以累加的方式将错误的信息输出到指定的文件或者设备上
其中>也为标准输出,默认为1
<为标准输入,默认为0,但是我们可以进行流的重定向。
4关于linux中清空某文本的整个字符
一般我们使用vim编辑器,在一般模式下输入gg,这样会跳到文本的第一行
然后输入dG 就回请空所有字符了。
借鉴另外一位大神的方法,echo > file
4关于线程退出
一般在linux中,涉及多线程的编码问题的时候。
一般主线程会陆续生成子线程来处理相应的内容,默认的线程状态为joinable,如果我们主线程调用pthread_join(pthread_id)来等待这些子线程运行结束,并得到他们的退出吗,进行相应资源的回收。这种思想是完全正确的,但是他是一种阻塞式的等待,如果我们的主线程一直等不到 你执行完成,就一直阻塞在那里。
如果新来一个客户端,需要我们为其创建线程,是完全无法执行下去的。
因此我们采用pthread_detach()
可以在主线程中调用pthread_detach(pthread_id);
或者在子线程中自身调用pthread_detacch(pthread_self());
这个函数的目的是设置了该子线程状态为detached,含义:该子线程运行结束后,会自动释放所有资源