
C/C++
文章平均质量分 74
firefoxbug
这个作者很懒,什么都没留下…
展开
-
指针指向字符串和数组储存字符串区别
<br />#include <stdio.h>void main(){ char *p = NULL,*str = "aafg" ,aa[10] = "abc"; p = strcpy(str,aa); printf("%s/n",p );}<br />定义了一个指向字符串的指针,str是在栈上分配的变量,储存的地址对应的是在常量区中分配的空间。"aafg"是存储在常量区里面,<br />是不能改变的。char *str 其实存在一种 const char *类型的隐式转原创 2011-05-16 12:57:00 · 1037 阅读 · 0 评论 -
linux下添加libpcap模块
先从 http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libpcap.html 下载libpcap-1.1.1.tar.gz# tar -xvf libpcap-1.1.1.tar.gz 解压cd libpcap-1.1.1/ 进入到路径下./configure && make这时候可能会提示:configure : e原创 2012-04-18 14:51:55 · 4499 阅读 · 0 评论 -
gcc 静态库和动态库
//hello.c#include void print_hello(){ printf("HelloWorld ");}//main.c#include#include "hello.h"int main(){ print_hello(); printf("%d",HELLO); return 0;}//hello.h#define HELL原创 2012-05-14 10:46:41 · 1204 阅读 · 0 评论 -
linux串口传输文件
需要从FPGAm上传输文件到PC机上,下面是串口传输文件的小程序,可以测试下串口buffer的大小,我电脑上大概4K多,也可以测试串口寄存器大小读入读出大小,我这里是32bytes。write.c#include #include #include #include #include #include #incl原创 2012-06-17 11:19:13 · 5188 阅读 · 2 评论 -
自己动手学TCP/IP–tftp协议
TFTP(Trivial File Transfer Protocol,简单文件传输协议)1.tftp的服务端口号是692.tftp是基于udp协议的3.tftp是明文传输的,是一种比较轻量型的协议,一般用于bootloader加载内核TFTP工作流程服务端开启tftp服务,tftp是一种stand_alone服务,不是常驻内存的,是在有需要的时候才去调用的原创 2012-06-11 12:09:19 · 10792 阅读 · 0 评论 -
自己动手学TCP/IP–http协议(http报文格式)
HTTP(HyperText Transport Protocol,超文本传送协议)HTTP请求报文http请求数据包的格式:头部(request line + header)+ 数据(data)头部和数据包体通过一个空行来隔开,头部的格式主要包括请求行+请求头部。如下图请求行请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们原创 2012-06-19 17:13:10 · 14387 阅读 · 2 评论 -
Linux下十六进制转成中文
在实现web服务器一项功能中:在处理post包数据段的内容是以一个字节一个字节读取的,所以如果post的内容是中文的话,输出的时候会变成十六进制,那么怎么把十六进制再转成中文呢?#include #include #include void ansiToutf8(char *src,char *desStr);int main(){ char desStr[200]原创 2012-07-04 21:12:16 · 3722 阅读 · 1 评论 -
自己动手学TCP/IP–http协议(http报文头)
在前面的一篇文章中,简单了介绍了HTTP报文格式,详情参考http://www.firefoxbug.net/?cat=47。这里大概介绍下基本的,常见的HTTP包头格式。POST /report/getComment.jsp HTTP/1.1Host: yeeg.comConnection: keep-aliveContent-Length: 161Origin: http:原创 2012-07-11 00:13:42 · 12235 阅读 · 0 评论 -
cgi下dup2()问题
函数名: dup2功 能: 复制文件句柄用 法: int dup2(int oldhandle, int newhandle);#include define STDIN_FILENO 0 /* Standard input. */#define STDOUT_FILENO 1 /* Standard output. */#define原创 2012-07-01 23:48:00 · 3613 阅读 · 0 评论 -
setenv,getenv,fork
我们在实现CGI程序的时候,有时候会用setenv设置环境变量传递给子进程。那么父进程是怎么传递给子进程的呢?//father.c#include #include #include #include #includeextern char **environ;int main(){ char *str = "Hello From Father"; char *原创 2012-07-02 11:37:02 · 6500 阅读 · 0 评论 -
自己动手学TCP/IP--以太网帧
数据链路层主要的功能把网络层的包封装成帧对帧的校验和确认流量的控制数据链路层生成以太网帧,以太网帧的主要格式如下。太网帧的传输大小是由传输媒介决定的,数据帧的大小是64—1518。帧头14个字节,分别是目标MAC地址(6个字节)+源MAC地址(6个字节)+协议类型(2个字节),帧尾是32位的CRC冗余校验。对于两个字节协议字段,0原创 2012-07-19 14:43:43 · 8051 阅读 · 0 评论 -
自己动手学TCP/IP--traceroute程序
traceroute程序主要是能列出到达目标主机所经过的路由。traceroute最简单的基本用法是:traceroute hostname。traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram到目的地,当路径上的第一个路由器(router)收到这个d原创 2012-08-05 10:39:24 · 12544 阅读 · 0 评论 -
自己动手学TCP/IP--TCP连接三次握手
TCP是面向连接的协议,面向连接的意思就是在连接的基础上实现数据的传输。TCP面向连接保证了它在通信过程中的可靠性。TCP头部是20个字节,详细的报文格式和各个字段的解释可以看下面:在TCP通信之前,建立连接的过程被称为三次握手,下面是wireshark抓出来的图。1.第一次握手:客户端发送SYN标志,序列号seq(随机生成,图中序列号是0是wireshark做了相对处原创 2012-08-05 21:41:27 · 3637 阅读 · 0 评论 -
自己动手学TCP/IP--ICMP(ping报文)
ping是ICMP的一种,是用来检查网络是否通畅或者网络连接速度的命令。报文长度(98bytes)= 以太网头(14bytes)+ IP头(20bytes)+ICMP头(8)+ ICMP数据内容(56字节)报文格式ICMP回显请求报文类型是8(ICMP_ECHO),标识符字段是进程的ID,用于接受应答包的处理,序列号是不断加1,ICMP数据内容选项则包含了发送包时系统的时间。I原创 2012-07-22 22:07:50 · 31025 阅读 · 6 评论 -
linux 有名管道(FIFO)
无名管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,原创 2012-11-01 17:14:28 · 30784 阅读 · 3 评论 -
linux 守护进程编程
守护进程简介守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母原创 2012-11-05 10:54:26 · 1288 阅读 · 0 评论 -
Linux线程互斥锁
线程互斥锁的设置就是为了多线程之间临界资源更好的共享,加了锁的资源就不能被其他的线程访问,除非等到占用锁的线程释放该锁。互斥锁的操作主要包括互斥锁初始化、上锁、判断上锁、解锁、摧毁互斥锁。分别由以下几个函数实现#include int pthread_mutex_init (pthread_mutex_t* mutex, const pthread_mutexatt原创 2012-11-28 20:33:30 · 1178 阅读 · 0 评论 -
二叉排序树
二叉排序树(Binary Sort Tree)性质:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;#include #include typedef struct BinSortTree{ struct BinSortTree *lChi原创 2011-12-30 00:06:02 · 3927 阅读 · 2 评论 -
C语言的异常机制--setjump()和longjump()实现
/* -------------------------------------------------------------------------** File : cexcept.c *** Coder: Spark Song. * ** Note : Use the exa转载 2011-03-27 21:54:00 · 3415 阅读 · 3 评论 -
C/C++ 通用 Makefile
<br /><br />C/C++ 通用 Makefile <br />Generic Makefile for C/C++ Program <br /><br />==================================================<br />Keywords: Makefile, make, Generic, C/C++<br />Author: whyglinux (whyglinux AT hotmail DOT com)<br />Date: 2006-转载 2011-05-29 23:40:00 · 936 阅读 · 1 评论 -
union 共用体的使用
union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名; 共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所原创 2011-06-05 01:59:00 · 1550 阅读 · 2 评论 -
VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题(转)
<br /> <br />现象:在vs2008中,建立一个空项目,添加一个c++文件main.cc<br />#include<iostream><br />using namespace std;<br />int main()<br />{<br />cout << "hello"<<end;<br /><br /><br />return 0;s<br />}<br />该程序能够编译得过,但是执行,无论是debug还是release,都很出现<br /><br /><br />“无法找到“xxx.e转载 2011-04-24 16:42:00 · 4210 阅读 · 0 评论 -
.h文件扩展名变化后为什么还能正常使用?(疑问)
今天看到博客,然后发现一个比较有意思的程序。就是没搞懂为什么是这样,还是直接上代码吧,//test.c#include #include "C:/define.h"#define SIZE sizeof(int)int main(int argc, char *argv[] ){ printf("%ld",UINTMAX); printf("/nThe si原创 2011-06-15 22:17:00 · 1475 阅读 · 2 评论 -
windows程序设计之菜单简介
菜单是很重要的资源,我就大概看了些菜单,总结了下菜单的基本使用。要引入菜单资源: Resource Script 资源脚本 添加到工程里面,这里要注意,产生后出现两个文件,这里假设是menu.rc和rescource.h,由于rc是资源文件的集合,能包含图标,菜单,字符文件资源等等,也可以包含多个菜单。所以你在引用菜单的时候一定要把菜单的名字和你指定的引用的相同,你可以用文本编辑原创 2011-07-02 17:29:39 · 1405 阅读 · 0 评论 -
windows下安装,配置gcc编译器
在Windows下使用gcc编译器:1.首先介绍下MinGWMinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。 实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而原创 2011-08-27 16:28:45 · 80267 阅读 · 16 评论 -
gcc/g++基本命令简介
gcc & g++现在是gnu中最主要和最流行的c & c++编译器 。g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c。这时候命令换做gcc即可。其实是无关紧要的。其实编译器是根据gcc还是g++来确定是按照C标准还是C++标准编译链接。下面原创 2011-09-27 00:19:29 · 7216 阅读 · 0 评论 -
C 内存管理详解
程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分配方式有三种: (1)从静转载 2011-09-30 00:21:43 · 592 阅读 · 0 评论 -
数组和指针
数组访问数组和指针访问数组的区别:char a[] = "abcdef"; char *p = "abcdef";数组的访问是通过先获取数组的首地址,然后通过相对的偏移量来获取地址,通过地址读出内容;指针的访问形式:假设指针本身的地址是4624,先是存储变量是4624原创 2011-04-03 18:56:00 · 871 阅读 · 1 评论 -
程序的装载和链接
今天跑去计算机学院上OS课的时候了解了下程序的装载和链接,虽然很理论,但还是决定记下来,再加些自己的理解。回来第一件想弄清楚的就是逻辑地址,虚拟地址和物理地址。我去网上查了一下,在http://bbs.chinaunix.net/thread-2083672-1-1.html看到了解释,我觉得解释的很好,就copy下了((*^__^*) )-------------------------原创 2011-10-27 19:07:49 · 3915 阅读 · 0 评论 -
Linux基本常用命令
man vim 命令帮助,查看命令使用形式。 命令行下快捷 有时候在 X-Window里由于程序出错,使鼠标键盘都不起作用, 这时候不用着急, 因为在Linux下几乎不会像在Win 9x里那样恶性死机, 你只须键入Ctrl+Alt+BackSpace键就可以回到字符界面下了。 Ctrl+a :标移到行首。 Ctrl+e:把光标移到行尾。原创 2011-11-07 09:02:05 · 2044 阅读 · 4 评论 -
基本调试命令
OD基本调试命令F2:设置断点F8:执行下一条指令F7:单步步入,功能和F8类似,区别是遇到cll指令调试子程序会跟进子程序F4:运行到选定位置F9:运行程序,若是没有断点就一直处于运行状态F12:停止运行Debug基本调试命令debug filename 进入调试-R 查看,修改寄存器的内容,比如R CS,可以查看CS寄存器内容,并且可以修改-原创 2011-11-05 21:13:31 · 1323 阅读 · 0 评论 -
一个十几行简单的C程序引发的思考
今天碰到一个很好玩的程序,我纠结了很久才弄明白。。。下面解释都是在Debug模式下的:#include #include void Fun();int main(){ BYTE *p; p = (BYTE *)Fun; printf("p = %X\n",p); printf("*p = %X\n",*p); printf("Fun = %X\n",Fun);原创 2011-11-07 23:43:56 · 4643 阅读 · 5 评论 -
一个小程序的栈溢出
看下面代码:#include int cp (char *p){ int a; char b[8]; a=strcmp(p,"1234567"); strcpy(b,p); return a;}int main(){ int v=0; char p[1024]; while(1) { printf("please input password:原创 2012-01-12 21:07:09 · 4311 阅读 · 0 评论 -
双栈
双栈意思就是双向栈,基本思想就是在一段内存里面,栈从两边分别向中间生长,这样可以提高内存的利用率。下面是C的实现代码,仅仅是基本的功能,重在于思想。#include #include #define INIT_STACK_SIZE 100typedef int ElemType;typedef struct DoubleStack{ ElemType *array; int t原创 2012-01-22 13:34:06 · 1669 阅读 · 0 评论 -
浅谈Linux下mv和cp命令的区别
我之前在项目中遇到一个很奇怪的问题,对于inotify监视一个文件的时候,发现有些时候inotify有些时候会“失效”。后来我就没办法,去监视文件所在的目录。看下面的,#!/bin/bashsrc=/tmp/test/test.txt # directory to monitor/usr/local/bin/inotifywait -rmq -e modify $原创 2012-12-06 22:15:36 · 13133 阅读 · 1 评论