c语言学习
-黑色幽默-
Free style
展开
-
使用kdump捕获kernel的崩溃
kdump是在系统崩溃、死锁或者死机的时候用来转储内存运行参数的一个工具和服务。背景介绍在linux系统软件开发的过程中,会遇到开发完的程序导致kernel崩溃,此时我们想要查找崩溃留下的蛛丝马迹来定位bug,但是此时kernel已经崩溃了,平时定位bug的命令和工具都不能工作了,唯有断电重启,此时可以采用kdump工具,定位kenel崩溃。工具介绍kdump是一种先进的基于 ...原创 2019-10-23 15:57:05 · 2541 阅读 · 0 评论 -
linux平台下静态库的创建和使用
linux平台下静态库的创建和使用原创 2014-04-17 11:23:57 · 543 阅读 · 0 评论 -
内联函数
内联函数是一种编译机制,优点从代码上是看不出来的,但是程序的执行效率上有差别,通常,编译器对函数调用的处理是一种类似中断的方式,即当执行到函数调用语句时,程序把当前所有的状态信息比如CPU所有寄存器(其中一个很重要的就是指令指针寄存器)的值保存起来,然后放心大胆地转去执行那个函数的代码,执行完后再返回原来的地方,恢复原先保存过的状态信息,于是也就可以接着原来被中断的指令继续往下执行。这样,就很容易转载 2014-04-10 17:24:05 · 644 阅读 · 0 评论 -
利用printf打印彩色数据
printf("/033[31m ####----->> /033[32m" "hello/n" "/033[m"); 颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景 背景色 字体色 40: 黑 30: 黑 41: 红 31: 红 42: 绿 32: 绿 43: 黄 33: 黄 44: 蓝 34: 蓝 45: 紫 35: 紫转载 2014-04-03 18:03:16 · 1152 阅读 · 0 评论 -
namespace的用法
namespace的用法 C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命转载 2014-01-10 13:47:29 · 724 阅读 · 0 评论 -
extern "C"的作用
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有转载 2013-12-30 10:45:31 · 559 阅读 · 0 评论 -
大端格式、小段格式,以及数据在内存中的存储方式
大端格式、小端格式,以及数据在内存中的存储方式内存中的地址.左→右,地址降低,下→上,地址升高。一个格子是一个字节,一个字节是8位。int a = 0x01020304若为小端格式(arm默认是小段格式) 内存格式0x40010x40020x40030x400401020304原创 2013-12-27 17:52:45 · 7660 阅读 · 0 评论 -
拷贝构造函数简单例子
拷贝构造函数就是用已存在的对象来初始化另一个对象。上面fanwanping(6827)所说的有点不妥,拷贝构造函数应该使用引用,上面那个例子应该写成这样:class A{private: int b;public: A(int c=0); A(A &a); ...};A::A(int c=0){ b=c;}A:转载 2013-11-11 11:16:25 · 888 阅读 · 0 评论 -
ofstream 和ifstream的具体用法
ofstream 和ifstream的具体用法2008-03-30 23:38:转自:http://hi.baidu.com/sibeichen055/blog/item/e81aca3398d807fc1b4cff78.html这个小知识点迷糊了很久了,前段时间始终没有搞清楚,今天又拿过来看的时候好象明白了点......今天将ifstream 与ofstream的转载 2013-08-21 08:05:01 · 810 阅读 · 0 评论 -
rand函数和srand函数的用法和区别+产生指定区间的随机数如何生成
rand函数和srand函数的用法和区别 (2012-03-12 10:23:55)转载▼标签: 杂谈 标准库 (被包含于 中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0转载 2013-08-04 20:28:57 · 1609 阅读 · 0 评论 -
快速排序法(递归调用)
小弟刚学算法,这事打手打的第一个快速排序,算法比较简陋,冗余,如果您看到有需要改进的地方,请您高台贵手,不费口舌,指点小弟一下,以便让小弟开阔视野,继续前进。 1 //quick.cp 2 #include 3 using namespace std; 4 5 //这是递归调用函数中交换函数 6 void sw原创 2013-08-05 10:59:47 · 1963 阅读 · 0 评论 -
linux线程安全
为防止多线程同时访问同一个变量,而产生错误,需要对变量或代码区加锁,只允许一个线程操作变量。 锁的种类有四种:自旋锁(SpinLock):锁的目的是为了保护共享资源,实现线程同步。自旋锁区别于其他锁的地方在于若某线程在未获得锁时将不断的询问(判断)自旋锁保持者是否释放了锁(获取锁操作将自旋在那里,不断地申请获取,直到自旋锁保持者释放了锁),因此比较适用于保持锁时间比较短的情况(CPU一直在空转)原创 2017-03-15 10:31:03 · 635 阅读 · 0 评论 -
传递动态内存
传递动态内存 2011-09-04 09:24:12| 分类: C/C++|举报|字号 订阅当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道.这些往往会使人受尽折磨.所以如果你想深入C/C++编程,你必须静下心来,好好苦一番.现在我们将讨论C/C++里我认为哪一本书都没有完全说清楚,也是涉及概念细节最多,语言中最难的技术之一转载 2014-08-12 10:36:27 · 472 阅读 · 0 评论 -
pthread_cond_signal与pthread_cond_wait详解
pthread_cond_signal与pthread_cond_wait详解 2012-12-31 01:54:17分类: C/C++//pthread_cond_signal 只发信号,内部不会解锁,在Linux 线程中,有两个队列,分别是cond_wait队列和mutex_lock队列, cond_signal只是让线程从cond_wait队列移到转载 2015-08-19 14:50:26 · 881 阅读 · 0 评论 -
关于uint8_t数据类型的理解
我们知道的常用数据类型有char、int、double、flout、string、struct等,其实这里的uint8_t不是什么新的数据类型,他只是用typedef定义出来的一个东东,那么为什么会有uint8_t数据类型的出现呢,其实主要是为了预防程序在不同平台之间移植会出现不兼容性,如果我们看到一个int类型数据,我们并不知道他有多少位,因为有点运行平台是32位系统,有点是64位,并且由于编译原创 2013-12-25 14:24:21 · 13744 阅读 · 1 评论 -
堆和栈的区别
一个程序一般分为3段:text段,data段,bss段text段:就是放程序代码的,编译时确定,只读,data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域bss段:定义而没有赋初值的全局变量和静态变量,放在这个区域 这个够不够清楚呢?堆栈就是栈的简称。堆和栈的区别一、预备知识—转载 2014-04-10 17:14:59 · 518 阅读 · 0 评论 -
友元函数
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。 友元函数 友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。下面举一例子说明友元函数的应用。 #include #include class Point { p转载 2013-07-30 17:32:00 · 899 阅读 · 0 评论 -
linux下的c线程(写的非常好)
《linux wait与waitpid函数的深入分析》已有 2050 次阅读 2010-9-30 20:01 |个人分类:LINUX系统|关键词:waitpid linux 函数 wait 子进程 fork 僵尸一)系统调用wait1)概述wait函数的原型为:pid_t wait(int *status)当进程退出时,它向父进程发送一个SIGCHLD信号,默认情况下总是忽略S转载 2013-07-31 16:34:26 · 920 阅读 · 1 评论 -
struct sockaddr与struct sockaddr_in的区别和联系
struct sockaddr与struct sockaddr_in的区别和联系最近在看网络编程部分内容,刚开始接触结构体struct sockaddr和struct sockaddr_in的时候,极其迷惑,在网上翻了不少帖子,慢慢有那么点清晰了。呵呵,现在结合一篇网友的文章,对这两个结构体进行解读。在linux环境下,结构体struct sockaddr在/usr转载 2013-08-07 11:02:00 · 602 阅读 · 0 评论 -
友元函数的使用
关于C++中的友元函数的总结1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。转载 2013-07-29 07:38:54 · 1432 阅读 · 0 评论 -
线程的创建
线程的创建使用的是exec系列和fork()函数,exec包括execl,execv等。下面介绍fork格式为流程是当程序执行的fork,程序会产生一个副本,继续下面的程序执行,并为该线程分配一个pid为0,当执行到最后,返回到现成的创建点,源程序再次执行一遍下面的代码。实例程序:#include #include main(){pid_t pid;prin原创 2013-07-31 14:06:30 · 637 阅读 · 0 评论 -
构造函数使用
使用默认构造函数#include using namespace std;class T{private:int miniutes;int year;int hours;public:T(int = 1, int = 1, int = 2013);void print();};T::T(int h, int m, int y):h原创 2013-07-30 11:12:33 · 729 阅读 · 0 评论 -
malloc和new的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于m转载 2013-08-19 09:22:47 · 476 阅读 · 0 评论 -
open和fopen的区别:
open和fopen的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大转载 2013-09-02 09:07:23 · 518 阅读 · 0 评论 -
static的作用
static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; //转载 2013-07-29 07:54:31 · 594 阅读 · 0 评论