- 博客(51)
- 资源 (8)
- 收藏
- 关注
转载 Bind: Address Already in Use Or How to Avoid this Error when Closing TCP Connections
In order for a network connection to close, both ends have to send FIN (final) packets, which indicate they will not send any additional d
2011-08-20 22:54:55
1499
转载 Linux 32位向64位移植的一些问题及解决
整理了网上提到的Linux 32位向64位移植时的一些问题及解决方法,分享给大家参考!1.数据截断:由于long类型变量的运算(赋值、比较、移位等)产生。long定义在x86上为32bits,而在ia64上为64bits.容易在与int型变量运算时出现异常。处理方法:
2011-08-03 22:25:15
3261
转载 将32位代码向64位平台移植的注意事项
阅读提示:随着低成本64位平台的来临,加上内存和硬盘价格的不断下跌,无疑为32位程序向64位硬件的移植又加了一把劲,那些科学运算、数据库、消耗大量内存或密集浮点运算的程序也搭上了这一顺风车。在本文中,主要讨论向64位平台移植现有32位代码时,应注意的一些细小问题。新近
2011-08-03 22:22:03
943
原创 HashTable的实现
为了实现高效访问一个集合中的元素,Mpr中实现了Hash Table,其结构如下图所示 类的简单描述:MprHashTable是存储和管理Hash内容的类,MprHashEntry是HashTable的一项,有三个派生类MprStringHashEntry、MprStaticHashEntry和MprObjectHashEntry 个各类的详细描述
2009-11-22 10:32:00
3915
原创 双向循环链表的实现
最近将一个开源项目port到嵌入式设备上,发现其巨大部分类都是继承于双向链表(或者双向队列),这一个过程看似不可思议(感觉有违我们以前学的面向对象的知识),但是事实却是这样的方式使很多操作都变得简单起来,由于类继承于Link,则在Link类中不需要用特定的变量指向特定的数据,而这一过程在使用这个类的时候已近默认的实现。以前读本科的时候,也只是了解到了双向循环链表的理论,没有实现,今天乘这个机
2009-11-22 10:29:00
3034
1
原创 tellwait.c
#include "apue.h"static volatile sig_atomic_t sigflag; /* set nonzero by sig handler */static sigset_t newmask, oldmask, zeromask;static voidsig_usr(int signo) /* one signal handler for SI
2009-03-28 15:25:00
894
原创 prexit.c
#include "apue.h"#include voidpr_exit(int status){ if (WIFEXITED(status)) printf("normal termination, exit status = %d/n", WEXITSTATUS(status)); else if (WIFSIGNALED(status))
2009-03-28 15:23:00
846
原创 err.c
#include "apue.h"#include /* for definition of errno */#include /* ISO C variable aruments */static void err_doit(int, int, const char *, va_list);/* * Nonfatal error related
2009-03-28 15:20:00
1110
原创 apue.h
/* Our own header, to be included before all standard system headers */#ifndef _APUE_H#define _APUE_H#define _XOPEN_SOURCE 600 /* Single UNIX Specification, Version 3 */#include
2009-03-28 15:19:00
2216
原创 mulTdCpfile.c
#include "apue.h"#include #include void * copyFile(void *);// 创建空的文件int createFile(int fd, int size);/** 确定文件所属的大小范围,根据这个大小范围确定拷贝子进程的数目 * * 返回值 1 ------- 文件大小小于10K, 1个拷贝子进程
2009-03-28 15:09:00
696
转载 不错的实例(automake)
1、准备: 需要工具autoscan aclocal autoheader automake autoconf make 等工具. 2、测试程序编写: 建立目录:mkdir include src 编写程序:include/str.h#include int str(char *string); 编写程序:src/str.c #include "s
2009-03-01 09:48:00
1044
转载 automake之hello例子
automake之hello例子 1.新建c文档 2.生成configure autoscan cp configure.scan configure.in 编辑 configure.in现在将configure.scan改名为configure.in,并且编辑它,按下面的内容修改,去掉无关的语句: =========================
2009-03-01 09:43:00
615
转载 Linux下动态库静态库的使用
本文主要解决以下几个问题1 为什么要使用库?2 库的分类3 创建自己的库或许大家对自己初学linux时的情形仍记忆尤新吧。如果没有一个能较好的解决依赖关系的包管理器,在linux下安装软件将是一件及其痛苦的工作。你装a包时,可能会提示你要先装b包,当你费尽心力找到b包时,可能又会提示你要先安装c包。我就曾被这样的事搞的焦头烂额,至今一提起rpm仍心有余悸,头皮发麻。说是一朝被蛇咬,十
2008-11-24 17:07:00
1447
1
转载 动态库与静态库的原理介绍
在UNIX 的应用开发中,静态库和动态库都是我们经常用到的技术,有必要对这两个概念及其原理做一些介绍。静态库静态库是一些目标文件的集合,通常为后缀为.o 的文件,通过ar 工具打包而成,命名格式为libxxx.a ,其中xxx 为给定的静态库文件名,如libm.a ,为数学函数库,用户也可以命名自己的库。在创建可执行程序的过程中,静态库同时被链接到程序代码,被主程序调用的函数目
2008-11-24 17:03:00
2414
1
原创 ch06:目录操作
第六章 目录操作#include char *getcwd(char *buff, size_t size);ERANGEchar *buf;int len = 50;buf = malloc(len);while (!getcwd(buf, len) && errno = ERANGE){ len += 50; buf = rea
2008-06-08 10:29:00
711
原创 ch05:高级文件操作
第五讲 高级文件操作#include #include #include int main(){ int fds[2]; char buf[4096]; int i, fd; if ((fds[0] = open("p1",O_RDONLY)) {
2008-06-07 20:51:00
643
原创 ch04:信号处理
第四讲 信号处理信号是进程间通信的最简单形式信号的生命周期简单信号#include void *signal(int signum, void *handler);SIG_IGN, SIG_DFL, SIGKILL, SIGSTOP可靠信号 (sigset_t)信号和系统调用 Linux信号系统api 发送信号 int
2008-06-04 10:26:00
872
原创 ch03: 文件管理
第三讲 文件管理文件模式 常规文件管道(IPC):Linux系统的进程间通信的一种机制,FIFO的文件,有两种管道:无名管道和命名管道目录文件:以文件的方式进行操作设备文件:大多数物理设备都用文件来表示,有两种设备文件:块设备和字符设备符号连接:包含到定义文件的特殊路径,类似于windows下的快捷方式套接字:进程间通信的机制基本的文件操作
2008-05-31 17:41:00
737
原创 ch02:进程
第二讲 进程内核跟踪进程的下列信息运行的位置访问的文件信用状(安全机制)当前目录访问的内存空间1.进程的属性pid 基本属性pid(进程标识符)和ppid pid_t getpid() // 获得本进程的进程id pid_t getppid() // 在子进程中执行它,获得父进程的进程id 举例
2008-05-21 22:52:00
632
原创 ch01: Linxu系统了解和hello world编写
Linux的诞生和发展Unix操作系统的诞生美国贝尔实验室的Ken Thompson和Dennis ritchie开发Minix操作系统Andrew S. Tanenbaum开发Gnu计划GNU是gnu is not unix的递归缩写Richard m. stallman创办目的是开发一个类似unix并且是自由软件的操作系统Posix P
2008-05-09 23:40:00
552
转载 也谈如何在C语言中巧用正则表达式,并且如何将其转化成C++的形式
C语言中巧用正则表达式如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序员,用户同样可以在自己的程序中运用正则表达式。 标准的C和C++都不支持正则表达式,但有一
2008-05-03 00:21:00
872
转载 red hat 9装在虚拟机vmware上之后,连接网络是出现问题 Determining IP information for eth0... failed; no link present. Check cable?
MS 終於推出了Visual Studio 2005 SP1了,早在Beta版時,我就裝過 這個Service Pack了,結果相當令我滿意,IDE的速度上的確提升了不少,因此我一得知SP1正式版推出,就迫不及待的以最快速度安裝她,結果我看到了一個中英混合,New Project/New Item全部遺失的IDE,這下可嚇壞我了,我可不想重裝一整個Visual Studio 2005啊...
2008-04-09 22:54:00
879
转载 recv(经socket接收数据)
recv(经socket接收数据) 相关函数 recvfrom,recvmsg,send,sendto,socket
2008-04-08 15:13:00
2576
转载 #pragma与_Pragma
C90为预处理指令家族带来一位新成员:#pragma。一般情况下,大家很少见到它。 #pragma的作用是为特定的编译器提供特定的编译指示,这些指示是具体针对某一种(或某一些)编译器的,其他编译器可能不知道该指示的含义又或者对该指示有不同的理解,也即是说,#pragma的实现是与具体平台相关的。 为了让大家了解#pragma的用法,这里暂时以HP C Compi
2008-04-04 15:52:00
4519
转载 容器函数(deque)
Deque 总览 deque 和 vector 一样都是标准模板库中的内容, deque 是双端队列,在接口上和 vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用 vector 容器,下面提供 deque 的成员函数和操作,进行对比参考。 Deque 成员函数 函
2008-04-04 15:32:00
660
转载 getpwnam() -- 获取用户属性
#include #include int main(){ struct passwd * pw; char *username = "zxl"; pw = getpwnam(username); if (!pw) { printf("%s is not exist/n", username); return -1; } printf
2008-04-03 19:47:00
3361
原创 重新读《深入理解计算机系统》这本书
在这之前的一年时间里,我断断续续的看完了这本书,虽然理解了有些东西,但是现在回想起来好多东西还是不能够理解,所以从现在开始重新读这本书,希望自己的能力有更好的提高 。 这次不正着读,反过来读试一下,看看能有什么效果啊。。。
2007-08-13 22:05:00
589
原创 对齐的方式
字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间 加上填充字节;例如上面第二个结构体变量的地址空间。3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后 加上填充字节。
2007-08-13 14:04:00
638
转载 0/1的奥秘:直接取二进制中1的个数的算法
【问题描述】:给一段位数为n的二进制数,统计其中1的个数【算法概述】:将二进制数按照每2位分组,计算每2位中1的个数,保存在一个二进制数中。然后迭代上述过程,就得到了每4位中1的个数,每8位中的1的个数,迭代下去,最终得到n位中1的个数【算法复杂度】:log以2为底的n【算法描述】:摘自http://www.loveunix.net/html/200405/29967.html,作者:
2007-07-22 21:26:00
3558
1
原创 读代码好困难啊
从 七月14号开始就在读main(接近一千行)函数,到现在都还没有把main函数读完。在读的过程中,程序到处跳,刚刚又看到有一个有八百多行的函数,不知又要读多久啊。代码总长度粗略估计了一下,好像有十几万行,这样读可能读到毕业都读不完啊。。。。。。。。
2007-07-16 00:22:00
1041
1
原创 fd_set
fd_set) 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义来处理此类变量: fd_set set; FD_ZERO(&set); /* 将set清零 */ FD_SET(fd, &set); /* 将fd加入set */ FD_CLR(fd, &set); /* 将fd从
2007-07-15 23:50:00
1119
原创 与socket有关的一些函数介绍
1、读取当前错误值:每次发生错误时,如果要对具体问题进行处理,那么就应该调用这个函数取得错误代码。 int WSAGetLastError(void ); #define h_errno WSAGetLastError()错误值请自己阅读Winsock2.h。2、将主机的unsigned long值转换为网络字节顺序(32位):为什么要这样做呢?因为不同的
2007-07-15 16:16:00
624
转载 Linux C编程---网络编程
Linux C编程---网络编程摘要 网络编程,一定离不开套接口;那什么是套接口呢?在Linux下,所有的I/O操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。目前最常用的套接口是字:字节流套接口(基于TCP)和数据报套接口(
2007-07-15 16:10:00
990
转载 struct sockaddr_in和struct sockaddr有什么区别
struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14字节的协议地址*/ }; 上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 struct sockaddr_in { short
2007-07-15 16:05:00
2726
Advanced Programming In The Unix Environment
2011-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人