c/c++
xiaopohaibebo
原来你若真爱一个人 内心酸涩反而会说不出话来 甜言蜜语多数说给不相干的人听.
展开
-
ifconf和ifreq
用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给一种比较简单的理解方法, 仅供参考.首先先认识一下ifconf和ifreq://ifconf通常是用来保存所有接口信息的 //ifreq用来保存某个接口的信息struct ifreq { char ifr_name[IFNAMSIZ]; union {转载 2012-10-10 11:25:23 · 465 阅读 · 0 评论 -
c 语言的的 一些事
全局变量默认是外部的(讨厌)你会说“用全局变量可不是个好习惯!”。但在嵌入式系统中不同。举个例子,你有一个名为timer.c的文件,其中有个全局变量int counter,在另一个文件state_machine.c中,有另一个counter。如果你碰巧忘记了在它们之前加上’static’,它们就是同一个变量,你根本察觉不到,没有Warning,没有任何提示……这种行为看起来十分转载 2013-11-13 16:43:01 · 482 阅读 · 0 评论 -
一个简单的多线程socket
码了2个小时多,终于弄完了。用的编辑器是Qt creator ,突然发现在Qt creator上,也支持这些底层的c语言。在linux上调试无误。写这个,也算是自己读书的记录吧!#include #include #include #include #include #include #include #include #include #define PORT 1234原创 2013-11-10 21:36:03 · 884 阅读 · 0 评论 -
C语言各种数据类型及其在系统中占的字节和取值范围
C语言包含5个基本数据类型: void, int, float, double, 和 char. (另:C++ 定义了另外两个基本数据类型: bool 和 wchar_t. 一些基本数据类型能够被 signed, unsigned, short, 和 long 修饰所以short,long等等都不算基本数据类型。这是书上说的,所以C++是7种基本数据类型。空值型是一种,转载 2013-11-20 09:14:22 · 1479 阅读 · 0 评论 -
一个简单的makefile
avitest.c, avi.c avi.h//////////////////////////分割线/////////////////////////////////////objects = avitest.o avi.oedit:$(objects)cc -o edit $(objects)avi.o:avi.havitest.o:avi.hc原创 2013-10-31 23:13:31 · 472 阅读 · 0 评论 -
linux下检查内存泄露的工具 mtrace
最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。下面是它的用法.#include #include #include #include int main(){转载 2013-11-15 16:41:03 · 705 阅读 · 0 评论 -
avi格式的基本结构
文详细的解析了AVI文件的存储结构,介绍了微软提供的用来操作AVI文件的一组API使用方法,并通过例子代码,演示了如何将一组静态Bmp图片合成一个avi视频文件以及如何将一个avi视频文件解析保存为一系列的bmp图像文件。 关键词:avi文件 bmp图像 vc AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合转载 2013-10-31 08:41:33 · 950 阅读 · 0 评论 -
linux c信号
linux c信号 一、什么是信号 1、 信号就是软件中断,很多的程序都需要处理信号。信号提供了一种处理异步事件的机制。 例如:当用户在终端下运行一个程序时,用户在键盘键入一个中断键(CTRL+C),则会通过信号机制终止一个正在运行的程序。 2、每一个信号都有自己独特的名字。这些名字都是以SIG开头的。例如中断信号SIGINT.在linu转载 2013-10-15 11:07:22 · 694 阅读 · 0 评论 -
pthread_mutex_lock
pthread_mutex_lockpthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); 描述 pthread_mutex_loc转载 2013-10-12 08:44:34 · 30669 阅读 · 2 评论 -
sscanf linux c
最近在做日志分析,linux C 的开发环境,在对每行日志进行处理的时候,手下一个小伙用的是逐字节拆分成字段。 刚开始没注意,后来每天10几G的日志上来后,发现除了速度特别慢以外,还经常出问题,遇到错误格式的日志就直接崩溃。。。 拿过来帮他改的时候,觉得这里完全可以用sscanf来进行处理,于是google+man 以及半天的测试以后,终于找到了一个比较合理的格式字转载 2013-12-04 11:19:28 · 882 阅读 · 0 评论 -
connect函数connect的阻塞时间的判断
同事今天问我,如何在linux下的c代码里面控制connect的阻塞时间。应用的背景是:linux下的c程序有两个目标IP需要connect,如果用阻塞方式,当其中一个IP不能连接的情况下,程序将阻塞在connect函数上。 本来以为用setsockopt修改个什么参数就可以搞定,结果baidu了半天也没有结果。倒是在网上搜到很多这样的解决方案:将connect方式设置为非阻塞方式,这转载 2014-01-24 16:22:29 · 3251 阅读 · 0 评论 -
理解一般指针和指向指针的指针
在说指向指针的指针之前,不得不说指向变量的指针。先看如下示例:1. 指向整型指针先看如下示例: 1 #include iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a = 5; 7 int * p = &a; 8 cout "a = "转载 2014-11-04 11:49:04 · 386 阅读 · 0 评论 -
数据结构之链表
看了那么多原创 2014-10-29 09:47:22 · 395 阅读 · 0 评论 -
变长数组 C
#include "darray.h"#include /** File: darray.c:动态数组函数实现*//**功能:实现一个DArray结构体的初始化*参数:void*返回:DArray结构体*/DArray *darray_create(){ int i = 0; DArray *darray = (DArray *)malloc(sizeo原创 2014-09-28 18:38:58 · 578 阅读 · 0 评论 -
图文并茂用地址分析双向链表
网上很多对双向链表解释的文章都是用这个结构: 它们的连接情况是这样的: 相当的不直观,今天我要从详细的地址出发来解释双向链表的原理。 现定义一个结构体如下:struct student{char name;struct student *next;struct student *prior;};转载 2014-09-10 22:37:39 · 623 阅读 · 0 评论 -
1.简单的函数指针的应用
形式1:返回类型(*函数名)(参数表) [cpp] view plaincopychar (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); }转载 2014-09-19 15:40:43 · 448 阅读 · 0 评论 -
LINUX环境并发服务器的三种实现模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。1 循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的转载 2014-09-05 14:58:53 · 504 阅读 · 0 评论 -
Linux进程间通信方式--本地socket
http://blog.csdn.net/shanzhizi/article/details/16882087转载 2014-09-04 09:06:13 · 609 阅读 · 0 评论 -
c语言的位操作
C语言中,有时需要进行置位操作,比如针对其中的某些位。这样做的目的是既达到了目标,又不会影响其它位。常用的置位操作如下:#define setbit(x,y) x|=(1#define clrbit(x,y) x&=~(1 举个例子:int main(int argc, char* argv[]){ unsigned c转载 2014-02-06 23:25:37 · 529 阅读 · 0 评论 -
Linux实现的 ping
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PACKET_SIZE 4096#define MAX_WAIT_TIME 1#def原创 2013-09-23 23:03:00 · 627 阅读 · 0 评论 -
linux 下的广播编程
广播和多播只能使用UDP,两者不能够用TCP。 一个IP地址由网络号和主机号组成。所有主机号部分为全1的IP地址是广播地址。 这是广播的原理图。 应用程序只能通过UDP方式发送广播。 一般情况下,如果调用sendto,只能向非广播地址发送数据报。如果要发送广播数据报,必须告诉内核,可以通过设置SO_BROADCAST套接口选项来做到原创 2013-09-22 21:50:47 · 683 阅读 · 0 评论 -
强指针和弱指针
在Android的源代码中,经常会看到形如:sp、wp这样的类型定义,这其实是Android中的智能指针。智能指针是C++中的一个概念,通过基于引用计数的方法,解决对象的自动释放的问题。在C++编程中,有两个很让人头痛的问题:一是忘记释放动态申请的对象从而造成内存泄露;二是对象在一个地方释放后,又在别的地方被使用,从而引起内存访问错误。程序员往往需要花费很大精力进行精心设计,以避免这些问题的出现。转载 2012-11-02 23:48:06 · 486 阅读 · 0 评论 -
Linux几个调试宏__FUNCTION__ __TIME__ __LINE__ __FILE__ __DATA__
Linux几个调试宏__FUNCTION__ __TIME__ __LINE__ __FILE__ __DATA__这几个宏是编译器内置的,不是在哪个头文件中包含的直接上最简单的例子就好了,没必要多说。源码:#include int main(){ printf("The file is %s.\n",__FILE__); printf( "The date is %s.\n转载 2012-11-02 12:13:40 · 1630 阅读 · 0 评论 -
linux看门狗 ioctl
主板上提供一个可按分或秒计时的,最长达255级的可编程看门狗定时器,WDT超时事件发生时系统复位.本程序(w83627hf_wdt.c)是基于Winbond83627芯片的看门狗驱动程序.驱动程序接口wdt_open :打开设备,应用程序调用open时进入该函数.wdt_close :关闭设备,应用程序调用close时进入该函数wdt_write :写设备,若传入数据大小不转载 2012-10-19 18:01:06 · 4851 阅读 · 6 评论 -
异步通知fasync
linux设备驱动归纳总结(三):7.异步通知fasyncxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信转载 2012-10-19 15:35:52 · 1057 阅读 · 0 评论 -
fcntl()函数的用法
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd转载 2012-10-19 11:12:51 · 487 阅读 · 0 评论 -
信号驱动(SIGIO)的异步I/O
2008-10-19 23:54 结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序, 这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上"中断"地概念,比较准确的称谓是"信号驱动(SIGIO)的异步I/O"。我们先来看一个使用信号驱动的例子,它通过signal(SIGIO, in转载 2012-10-19 10:24:21 · 1893 阅读 · 0 评论 -
linux下错误的捕获:errno和strerror的使用
经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程序代码中包含 #include ,然后每次程序调用失败的时候,系统会自动用用错误代码填充errno这个全局变量,这样你只需要读errno这个全局变量转载 2012-10-18 15:11:15 · 870 阅读 · 0 评论 -
system () 函数详解
windows操作系统下system () 函数详解 函数名: system 功 能: 发出一个DOS命令 用 法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 程序例: #include #include int main(void) { printf("About to spa转载 2012-10-18 10:47:26 · 632 阅读 · 0 评论 -
使用 pthread_create存在的问题
天解决了困扰我好久的一个问题:短信网关内存不断攀升(好像看似内存泄露)。兴奋之余,积极响应ds和小飞鱼的号召,把此问题分享出来。虽然可供参考的部分并不多,但是也有一定的反面教材意义:-)问题描述:原有的短信网关,每产生一个socket连接,就会create一个或多个thread去处理这个socket上的数据收发(数据收发是在 CTCPConnection类中完成,这个类自动创建线程)。转载 2012-11-13 09:19:45 · 1612 阅读 · 0 评论 -
C语言版 Base64编码
in_str是输入缓冲区的地址in_len 要编码的数据的长度out_str 输出的地址需要在外面分配内存unsigned char *out_str = (unsigned char *) malloc (in_len * 4 / 3 + 1);然后再调用函数编码。void Base64Encode(const unsigned char *i转载 2013-10-06 09:08:11 · 848 阅读 · 0 评论 -
pthread_exit(void *retval)
原型:void pthread_exit(void *retval)/*thread.c*/ #include #include /*线程一*/ void thread_1(void) { int i=0; for(i=0;i<=6;i++) { printf("This is a pthread_1.\n"转载 2013-09-12 14:07:31 · 2621 阅读 · 0 评论 -
Linux时间函数之gettimeofday()函数之使用方法
一.gettimeofday()函数的使用方法:1.简介:在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙2.函数原型:#includeint gettimeofday(struct timeval*tv,struct timezone *tz )3.说明:gettimeofday()会把目前转载 2013-09-04 11:59:09 · 619 阅读 · 0 评论 -
linux c 网络编程 并发
[精华] Linux下各类TCP网络服务器的实现源代码 --------------------------------------------------------------------------------http://www.chinaunix.net作者:zhoulifa 发表于:2006-07-11 22:53:24 【发表评论】【查看原文】【Linux讨论区】【关闭】转载 2013-08-16 00:01:14 · 3839 阅读 · 0 评论 -
内存泄露检测工具比较
1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。2. Dmalloc-Debug Malloc Library.3. Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。4. Leaky-Linux下检测内存泄漏的程序。5转载 2013-08-04 16:15:02 · 604 阅读 · 0 评论 -
C++隐式转换
以两个C++的小例子来说明怎样通过使用显式构造函数来防止隐式转换。 有如下一个简单的复数类:class ClxComplex{public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dReal = dReal; dImage = dImage; } double GetReal() const转载 2013-01-31 16:20:21 · 496 阅读 · 0 评论 -
c++ struct map list 排序的小程序
#include #include #include #include using namespace std;struct student_score { char name[16]; int score;};int cmp(student_score a, student_score b){ return a.score > b.score;}转载 2013-01-09 15:12:01 · 1014 阅读 · 0 评论 -
input输入子系统框架
http://blog.csdn.net/sdvch/article/details/44619789http://blog.csdn.net/myarrow/article/details/7098504网上的例子很多,如上。数据结构static LIST_HEAD(input_dev_list);static LIST_HEAD(input_handler原创 2017-11-28 19:47:32 · 890 阅读 · 0 评论