![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux c
浪里狼
这个作者很懒,什么都没留下…
展开
-
linux中关于时间函数的线程安全
关于时间的几个库函数查看手册得知asctime(), ctime(), gmtime(), localtime()都是不安全的,因为这几个函数返回一个指针,这个指针指向一段静态内存区,所以是线程不安全的,这四个函数的线程安全版本是asctime_r(), ctime_r(),gmtime_r(), localtime_r()原创 2015-07-27 09:10:00 · 3838 阅读 · 0 评论 -
linux下的DES加密
linux下的DES加密des_crypt, ecb_crypt, cbc_crypt, des_setparity, DES_FAILED 都是用于DES快速加密调用格式 #include int ecb_crypt(char *key, char *data, unsigned datalen, unsigned原创 2015-12-16 11:06:08 · 8392 阅读 · 0 评论 -
源码到可执行文件的过程
源程序编译成可执行文件分为四个步骤:1.预处理读取源程序,根据#开头的命令修改源程序,例如头文件,在引用头文件的地方载入头文件内容。2.编译把源程序编译成汇编程序3.汇编把程序翻译成机器指令,把这些指令以可执行目标文件格式打包。4.链接程序需要引用到的库,这是链接器负责把引用的库合并到文件中原创 2016-05-28 15:18:24 · 502 阅读 · 0 评论 -
Magic number
指写到代码里的常量,数值一般程序员指定,可以通过写入幻数可以判定程序正确还是错误,比如在文件头写入幻数,可以通过比对幻数来判断文件是否被破坏,在缓冲区旁写入幻数,可以判断缓存是否溢出原创 2016-06-27 10:22:21 · 952 阅读 · 0 评论 -
无效初始值错误
编译代码报错,提示信息为“错误:无效的初始值设定”检查发现代码中定义了一个数组,如下:int array[10]=10;初始化时只是赋值一个初值,并没有用括号括起来,所以才会报错,数组初始化必须用括号括起来。原创 2016-06-27 10:30:33 · 2619 阅读 · 0 评论 -
DPDK研究之枚举类型
枚举类型,成员使用宏定义原创 2016-06-28 22:52:38 · 591 阅读 · 0 评论 -
汇编角度解释溢出段错误
段错误在编程中最常见的错误,对于段错误发生时,内存情况是高级语言无法看到的,但是汇编语言直接操作内存,从汇编角度来理解段错误,有助于我们编写更安全的代码原创 2016-07-11 22:20:38 · 1430 阅读 · 0 评论 -
gdb core文件调试
gdb和core文件调试段错误原创 2016-06-30 10:30:20 · 1460 阅读 · 0 评论 -
反汇编
利用objdump反汇编原创 2016-07-12 21:25:22 · 1497 阅读 · 0 评论 -
变量在函数体内和函数内嵌作用域内定义区别
变量定义在不同的作用域,代码性能上会有所不同原创 2016-07-12 21:45:00 · 1713 阅读 · 0 评论 -
作用域和生存周期的区别
编程中,会使用到各种类型的变量,它们因为类型和定义的地点的不同而导致他们在只能在程序某个地方区域使用或程序执行到某处而系统已经收回该变量的存储空间以留其他用。作用域就是前面提到的某个地方区域,生存周期既是指从变量的定义到系统收回改变量的存储空间这段时间。如:int test_fun(){static int num;num++;return 0;}num的作用域原创 2016-06-17 18:28:06 · 1087 阅读 · 0 评论 -
结构体成员初始化
结构体成员初始化原创 2016-08-21 15:52:27 · 1210 阅读 · 0 评论 -
DPDK安装
DPDK安装原创 2016-08-21 15:54:32 · 971 阅读 · 0 评论 -
DPDK网卡绑定和解绑
DPDK网卡绑定和解绑原创 2016-08-21 15:59:24 · 13015 阅读 · 0 评论 -
linux系统查看端口限值范围
查看系统本地可用端口极限值cat /proc/sys/net/ipv4/ip_local_port_range如图:32768~60999,就是我的系统可用于对外通信的端口范围原创 2018-07-21 18:04:53 · 16769 阅读 · 0 评论 -
centos安装g++
编译后缀CPP文件时需要用到g++编译器,但是有些系统不自带g++编译器的,需用户安装。安装g++有两种方式:安装包和在线安装一般我们为了安装后的软件与系统兼容,会选择在线自动匹配系统安装。centos中正确在线安装g++:yum install gcc-g++原创 2015-10-08 09:28:42 · 512 阅读 · 0 评论 -
linux c函数库参考手册
Linux C函数库参考手册第1章字符测试函数isalnum(测试字符是否为英文字母或数字)isalpha(测试字符是否为英文字母)isascii(测试字符是否为ASCII码字符)isblank(测试字符是否为空格字符)iscntrl(测试字符是否为ASCII码的控制字符)isdigit(测试字符是否为阿拉伯数字)isgraph(测试字符是否为可打印字符)isl转载 2015-10-30 14:04:55 · 2762 阅读 · 0 评论 -
函数strstr,strcasestr
一.strstr1.调用格式 #include char *strstr(const char *haystack, const char *needle);2.功能说明该函数在参数haystack给定的字符串中找到字符串needle出现的第一次位置。匹配字符串needle不会匹配字符串结束符‘\0’(参照实例代码1)。在早些版本的linux libc中该函数是不允许翻译 2015-08-25 08:29:01 · 9721 阅读 · 0 评论 -
进程组ID操作
进程关系调用格式 #include int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); pid_t getpgrp(void); /* POSIX.1 version */ pid_t getpgrp原创 2015-09-01 09:36:03 · 1552 阅读 · 2 评论 -
原子操作
原子操作在多线程编程中,访问同一个变量时需要利用锁来限制同一个时刻只有一个线程访问,否则会遇到未知的错误,最常用的锁有信号量、线程锁。系统也提供了一些原子操作来实现多个线程对同个变量的访问。它们的性能参照另外篇文章锁性能,从该文章中可知。原子操作比锁性能高,下面介绍系统所自带的几种原子操作头文件atomic.htypedef struct { int co原创 2015-08-31 09:55:11 · 939 阅读 · 1 评论 -
sizeof和strlen
sizeof是用来计算指定参数所占内存大小。sizeof不是函数,是单目运算符,调用形式:1.sizeof(arg)2.sizeof argarg可以是变量,类型修饰符,表达式,如果arg是一个字符串常量,那么返回字符串长度且包含字符串结束符例如 sizeof(int) sizeof(变量a) sizeof(表达式)strlen计算指定字符串长度,不包括字符串结束符原创 2015-08-05 09:05:08 · 403 阅读 · 0 评论 -
/etc/ethers
mac地址与ip地址文件,文件中包含了mac地址以及对应的ip地址,在文件中mac和ip是被空格或者tab隔开,mac格式为x:x:x:x:x:x,x是0-ff的16进制,mac是网络字节序的,ip地址可以使由DNS提供的域名,也可以是点分制的数字原创 2015-08-05 09:08:11 · 3350 阅读 · 0 评论 -
函数popen
一.popen函数1.简介创建一个管道,然后再创建一个进程。2.调用格式#include FILE *popen(const char *command, const char *type);3.popen说明创建一个管道,然后fork创建一个进程。由于管道具有单向性质,所以参数type只能指定为读或写,不能同时指定。函数返回的值也相应的只读或只写。参数原创 2015-09-09 16:56:35 · 1015 阅读 · 0 评论 -
内联函数
内联函数是指编译时,内联函数在调用的地方类似宏定义展开,避免了函数调用的开销。一般用关键字inline来修饰内敛函数。如:static inline int test_fun()。因为是编译时内联函数在调用地方展开,所有相同情况下,内联函数比普通函数编译后的执行文件要大。1.内敛函数中不能出现循环或switch语句,否则编译器会视其为普通函数2.一般才有几句语句的函数才适合定义成内原创 2015-08-07 09:12:38 · 560 阅读 · 0 评论 -
linux删除历史操作命令
有时候在系统中做了任何操作,但不想被别人知道,毕竟系统别人都可以登入查看,那怎么把自己操作系统的历史命令删除而不让别人知晓呢? 在linux系统里一旦操作了任何命令,都会被记录下来,可以通过history命令来查看历史命令,查看手册可知history -c 便是清除历史命令,但是重新进入系统查看历史命令时,历史信息依然会存在,那么history -c 只是清除当前shel原创 2015-09-07 08:54:28 · 45499 阅读 · 0 评论 -
多线程竞争
在多线程编程中,会经常碰到资源竞争的情况,如果多个线程同时访问同个资源,会照成未知的错误。如以下实例代码,多个线程对同个全局变量进行加1操作,得到的结果并非是我们想要的结果:unsigned long g_count_num = 0;long long getSystemTime() { struct timeb t; ftime(&t); return原创 2015-08-20 09:18:37 · 2866 阅读 · 0 评论 -
ccache的使用
在linux中编译程序会用到gcc,因为文件中都包含有头文件,编译的时候会把头文件展开,而头文件中可能又包含了其他的头文件,所以编译时这里会消耗太多时间,即使gcc现在已经优化了,即编译时只编译修改了的文件,但是头文件展开依然会消耗太多时间。ccache即是改变了这种缺点,它第一次编译时也许会消耗点时间,但是第一次编译时它会把那些头文件展开信息保存在缓存中,这样下次编译即使m原创 2015-09-15 09:21:04 · 5787 阅读 · 0 评论 -
编译程序的位数
在编译程序时,一般编译出来的程序位数与系统一致,可以通过参数-m32或-m64指定编译出来的程序的位数。原创 2015-10-08 09:12:12 · 579 阅读 · 0 评论 -
mv指令
格式:mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...使用说明:把文件名SOURCE重命名为DEST,或者移动SOURCE到DIRECTORY参数--backup -b如果目标文件存在,原创 2015-10-09 09:06:51 · 1218 阅读 · 0 评论 -
Floating Point Exception
Floating Point ExceptionFloating Point Exception就是浮点数异常,常常发生在编译好的程序,放入到另外台机器上运行时 。产生浮点数异常的原因是两台机器版本不同,程序在高版本的系统编译好,放入低版本系统运行因为低版本系统gcc有时候不支持高版本gcc的新技术,比如高版本gcc在链接时采用了新的哈希技术来提高动态链接的速度,所以才会产生浮点数异常原创 2015-10-13 10:13:13 · 23458 阅读 · 1 评论 -
详细解析命令行的getopt_long()函数
详细解析命令行的getopt_long()函数getopt_long支持长选项的命令行解析,函数中的参数argc和argv通常直接从main()的两个参数传递而来头文件 #include 函数原型int getopt_long(int argc,char * const argv[],const char *optstring,const struct option *long转载 2015-10-30 10:44:47 · 491 阅读 · 0 评论 -
#error的作用
#error预处理命令程序代码变成可执行程序时需要经过四个步骤,预处理,编译,汇编,链接在预处理阶段,主要时处理#开头的语句进行替换。#error表示预处理器遇到这个命令时,将停止编译,并打印用户自定义的错误信息...原创 2018-07-21 18:07:14 · 1789 阅读 · 0 评论