- 浏览: 90651 次
- 性别:
- 来自: 北京
最新评论
-
zzsczz:
双方定时发握手消息 更可靠。。。。。。
TCP非正常断开-检测方法
文章列表
[标题] char *(*(**(*(*(*x[5])(int,float))[][12])(double))(short,long))[][173] ?!
今天又捧起久违的K&R C拜读了一遍。其实有点东西在6年前就想写,借着今天这个机会,终于把它写出来了。
初看一眼标题中的变量定义感觉是不是很抓狂?:) ...
- 2009-09-15 10:00
- 浏览 1736
- 评论(0)
自:http://www.cppblog.com/SEMAN/archive/2005/11/30/1440.html
[介绍]
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
[参数详解]
-x language filename
设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据 ...
- 2009-09-15 09:25
- 浏览 1087
- 评论(0)
bcopy、bzero和bcmp是传统BSD的函数,属于POSIX标准;mem*是C90(以及C99)标准的C函数。区别在于,如果你打算把程序弄到一个符合C90/C99,但是不符合POSIX标准的平台时,后者比较有优势。
NetBSD的代码中有很多地方使用mem*(他们更偏爱mem*,以利于移植),即使内核也是如此,而FreeBSD的内核中则尽量避免使用(希望尽可能避免在内核中出现较多的C函数)。如果你提交代码的话需要注意这些约定。
在memset和bzero初始化数据间,我很多时候选择bzero, memset的一个缺点是第二个参数和第三个参数需要记忆,需要记住哪个是值和哪个是大小(如果 ...
- 2009-06-30 19:09
- 浏览 5077
- 评论(0)
当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。
函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。在参数传递中,有两个很重要的问题必须得到明确说明:
1) 当参数个数多于一个时,按照什么顺序把参数压入堆栈;
2) 函数调用后,由谁来把堆栈恢复原装。 ...
- 2009-06-30 19:00
- 浏览 1301
- 评论(0)
收集的一些基本函数实现手法,备忘~~
memcpy
/**
* memcpy - Copy one area of memory to another
* @dest: Where to copy to
* @src: Where to copy from
* @count: The size of the area.
*
* You should not use this function to access IO space, use memcpy_toio()
* or memcpy_fromio() instead.
*/
void * memcpy(void * ...
- 2009-06-30 18:53
- 浏览 1942
- 评论(0)
如果主机崩溃,write是否阻塞取决于内核的tcp缓冲区,但read将一直阻塞,直到超时ETIMEOUT,或由于某些中间路由器的原因返回EHOSTUNREACH/ENETUNREACH。select不能检测到该情况。
如果主机崩溃并重起,客户的write到达主机时主机响应RST ...
- 2009-06-30 13:05
- 浏览 6631
- 评论(1)
用 GDB 调试程序
GDB 概述
————
GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。
一般来说, GDB 主要帮忙你完成下面四个方面的功能:
1 、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2 、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式 ...
- 2009-06-30 13:01
- 浏览 1134
- 评论(0)
/**
文件名:epoll_demo.c
编译: gcc epoll_demo.c -pthread
程序源码如下(请自行编辑宏定义SERVER_IP为自己的IP):
*/
/*Linux 2.6 x86_64 only*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/epoll.h>
#include <sys/stat.h>
#i ...
- 2009-06-30 12:59
- 浏览 1747
- 评论(0)
用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符。在系统调用 的实现函数里,这个数字就会被映射成一个表示socket的结构体,该结构体保 ...
- 2009-06-20 10:54
- 浏览 9625
- 评论(0)
什么是Socket
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作 ...
- 2009-06-20 10:49
- 浏览 1729
- 评论(0)
Dos/windows使用了一种很愚蠢的方案来结束文件的每一行:居然使用了两个符号RETURN/LINEFEED,而Unix like OS就明智的多,使用一个NEWLINE(就是LINEFEED)。因此,如果在Linux下面阅读Dos/Windows文件,每一行会显示一个讨厌的^M,怎么办?
在vim里面打:
[ESC]:%s/[Ctrl-v][Enter]//g
就可以了。
解释一下:
Ctrl-v的作用是,使得接着输入的回车键被认为是一个特殊字符,而不是vim命令的结束。
;-)
- 2009-06-03 17:22
- 浏览 3614
- 评论(0)
简介
本文的目的是向Linux新手介绍一种无价的资源,Larry Wall的patch程序。patch是用来查找文件之间差异的GNU diff命令的一个接口;diff有很多选项,但是该命令最常用的用途是用来生成一个文件,该文件中列出了内容发生改 ...
- 2009-05-26 18:22
- 浏览 9514
- 评论(0)
三十分钟掌握STL
这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我 ...
- 2009-05-20 17:12
- 浏览 1615
- 评论(0)
GDB调试精粹及使用实例
来源:不详 (2006-07-14 11:18:05)
一:列文件清单
1. List
(gdb) list line1,line2
二:执行程序
要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。
如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。
利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
(gdb) set args – ...
- 2009-05-18 15:49
- 浏览 1404
- 评论(0)
作者: Scott Field
标准模板库(STL)介绍
0 前言.
1 定义一个list
2 使用list的成员函数push_back和push_front插入一个元素到list中
3 list的成员函数empty()
4 用for循环来处理list中的元素
5 用STL的通用算法for_each来处理list中的元素
6 用STL的通用算法count_if()来统计list中的元素个数
7 使用count_if()的一个更加复杂的函数对象。
8 使用STL通用算法find()在list中查找对象
9 使用STL通用算法find_if()在list中搜索对象
10 使用S ...
- 2009-05-17 16:42
- 浏览 2160
- 评论(0)