C/C++
文章平均质量分 70
terrytan18
这个作者很懒,什么都没留下…
展开
-
C/C++内存分配方式总结——来自《高质量编程指南》
C/C++内存分配方式有3种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好了(即已经编址),这些内存在程序的整个运行都存在。例如全局变量,static变量等。 (2)在堆栈上分配。在函数执行期间函数内局部变量(包括形参)的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放(堆栈清退)。堆栈内存分配运算内置于处理器的指令集中,效率很高,并且一原创 2012-06-15 00:44:42 · 427 阅读 · 0 评论 -
__init 和 __exit 修饰符
static int __init initialization_function(void){/* Initialization code here */}在内核模块中经常会看见这样的函数定义,声明中的__init标志看起来有点怪;它是一个给内核的暗示,给定的函数只是在初始化使用。模块加载者在模块加载后会丢掉这个初始化函数,给它的内存可做其他用途。一个类似的标签 (__i转载 2013-02-07 14:55:54 · 969 阅读 · 0 评论 -
lint使用简介
LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。 可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消除所有的LINT告警,我们就不会遇转载 2013-01-05 11:11:48 · 1249 阅读 · 0 评论 -
浅谈C/C++中可变参数的原理
以前只是知道C/C++可变参数怎么用,但是一直对它的原理是似懂非懂,现在对计算机有了比较深刻的认识之后,回头再看,豁然开朗。AD:要理解可变参数,首先要理解函数调用约定, 为什么只有__cdecl的调用约定支持可变参数,而__stdcall就不支持?实际上__cdecl和__stdcall函数参数都是从右到左入栈,它们的区别在于由谁来清栈,__cde转载 2013-01-05 13:37:14 · 320 阅读 · 0 评论 -
c语言实现向远程http服务器传数据
最近项目中要实现一个从嵌入式设备中通过http请求向远程服务器传输数据的功能。所以写了一个简单的测试程序,客户端用c语言实现http请求,服务器写了一个简单的php页面打印客户端发来的数据。服务器端php代码:<?php $raw_post = file_get_contents("php://input"); echo $raw_post;?>客户端代码:#原创 2012-12-18 22:33:34 · 2227 阅读 · 0 评论 -
C函数调用shell脚本
C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数1)system(shell命令或shell脚本路径); 执行过程:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD原创 2012-12-27 15:02:38 · 659 阅读 · 0 评论 -
多线程编程-条件变量
有的时候仅仅依靠锁住共享资源来使用它是不够的。有时候共享资源只有某些状态的时候才能够使用。比方说,某个线程如果要从堆栈中读取数据,那么如果栈中没有数据就必须等待数据被压栈。这种情况下的同步使用互斥锁是不够的。另一种同步的方式--条件变量,就可以使用在这种情况下。条件变量的使用总是和互斥锁及共享资源联系在一起的。线程首先锁住互斥锁,然后检验共享资源的状态是否处于可使用的状态。如果不是原创 2012-09-20 22:24:34 · 281 阅读 · 0 评论 -
Boost.asio的简单使用(timer,thread,io_service类)
2. 同步Timer本章介绍asio如何在定时器上进行阻塞等待(blocking wait). 实现,我们包含必要的头文件. 所有的asio类可以简单的通过include "asio.hpp"来调用.#include #include 此外,这个示例用到了timer,我们还要包含Boost.Date_Time的头文件来控制时间.转载 2012-09-14 00:25:50 · 622 阅读 · 0 评论 -
深入浅出VA函数
VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc, char* argv[]算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exe转载 2012-09-02 12:12:33 · 505 阅读 · 0 评论 -
总结几种结构体初始化方法
结构体能自由组装数据,是一种很常见的数据打包方法。当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,而且这种错误很难发现。对于定义的任何变量,我们最好都先初始化。 除了使用memset和ZeroMemory之外,有没有更简单的方法初始化呢?因为有时候每定义一个结构体,就使用一次memset,也会觉得很繁琐。 我这里总结三种方法,如果大家有什么好的方法,不妨加上去。转载 2012-08-23 09:29:43 · 861 阅读 · 0 评论 -
安全编程: 防止缓冲区溢出
1988 年 11 月,许多组织不得不因为“Morris 蠕虫”而切断 Internet 连接,“Morris 蠕虫”是 23 岁的程序员 Robert Tappan Morris 编写的用于攻击 VAX 和 Sun 机器的程序。 据有关方面估计,这个程序大约使得整个 Internet 的 10% 崩溃。 2001 年 7 月,另一个名为“Code Red”的蠕虫病毒最终导致了全球运行微软的 II转载 2012-09-01 15:59:42 · 1875 阅读 · 0 评论 -
Glibc 的malloc源代码分析
有人写了一个测试程序#include #include #include #include main(){ int alloc_time = 20000; char* a[alloc_time]; char* b[alloc_time];for(int j=0; j{ for(int i=0; i { a[i] = (c转载 2012-07-26 22:57:27 · 507 阅读 · 0 评论 -
error while loading shared libraries的解決方法
在linux下运行程序时,发现了error while loading shared libraries这种错误,一时间不知道解决办法,在网上搜索,终于解决了: ./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory转载 2012-07-24 16:52:55 · 1006 阅读 · 0 评论 -
Linux下makefile教程
转自陈皓 (CSDN)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你转载 2012-06-19 00:33:20 · 606 阅读 · 0 评论 -
Const,Const函数,Const变量,函数后面的Const (zz)
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设转载 2012-07-06 22:05:36 · 356 阅读 · 0 评论 -
offsetof(TYPE, MEMBER)宏和container_of(ptr, type, member)宏的实现
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 4.(size_t)(&(((TYPE*)原创 2013-03-12 22:45:28 · 519 阅读 · 0 评论