
linux_高级编程
文章平均质量分 78
漂泊的水手
简单,努力,好学
展开
-
Mini-XML的使用手册
序言本文结构词法约定缩略语其他参考法律信息构建,安装,以及打包Mini-XML编译 Mini-XML使用 Visual C++ 进行编译使用命令行工具进行编译安装 Mini-XML创建 Mini-XML 包Mini-XML 入门基础知识节点创建 XML 文档加载 XML保存 XML控制自动输出换行搜索和遍历节点更多的转载 2012-03-07 11:58:55 · 6784 阅读 · 0 评论 -
长连接和心跳包
第一种设置:通过设置socket的keepalive属性#include "/usr/include/linux/tcp.h"#include "/usr/include/linux/socket.h"////KeepAlive实现,单位秒//下面代码要求有ACE,如果没有包含ACE,则请把用到的ACE函数改成linux相应的接口int keepAlive = 1;//设转载 2012-04-04 19:38:00 · 9473 阅读 · 2 评论 -
linux中的线程屏蔽码和进程屏蔽码
1. 在主线程中屏蔽 SIGUSR1信号 2. 再creat两个子线程write 和 read,在write线程中取消SIGUSR1的屏蔽。3. 这样 通过 其它进程向此进程发来 SIGUSR1信号将由 write线程接受sigprocmask 是改变整个进程的信号屏蔽pthread_sigmask 只是改变线程自己的信号屏蔽我通过 kill -SIGUSR1转载 2012-04-05 09:48:01 · 3074 阅读 · 0 评论 -
linux UDP编程学习总结
与TCP的不同使用TCP套接口必须先要建立连接,而UDP套接口不需要预先建立连接,它在调用socket()生成一个套接口后,在服务器端调用bind()绑定端口,服务器阻塞于recvfrom()调用,客户端调用sendto()发送数据请求,阻塞于recvfrom()调用,服务器端调用recvfrom()接受数据,服务器端额调用sendto()向客户发送数据作为应答,然后阻塞于recvfrom()转载 2012-04-04 19:38:39 · 1090 阅读 · 0 评论 -
C++:p2p通信,打洞技术,穿越NAT的实现
UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)NAT设备的类型介绍:转载http://www.limou.net/?p=120NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。全克隆( Full Cone) : NAT把所有来自相同内部IP地址和转载 2012-04-06 10:46:53 · 5769 阅读 · 0 评论 -
五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O
转载至:http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520112163171778/种I/O 模式:【1】 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)【2】 非阻塞 I/O (可以通过fc转载 2012-04-09 13:42:04 · 1072 阅读 · 0 评论 -
gethostbyname 和 gethostbyname_r(可重入的)得到dns信息
使用这个东西,首先要包含2个头文件:#include #include struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent {转载 2012-04-06 14:03:17 · 19831 阅读 · 0 评论 -
使用 getopt() 进行命令行处理
简介: 所有 UNIX® 程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其宝贵的时间花在了编写自己的命令行解析器,却不使用getopt(),而后者是一个专门设计来减轻命令行处理负担转载 2012-04-11 16:43:52 · 503 阅读 · 0 评论 -
进程间通信---共享内存(shmget)
当然只有mmap是可以的,不过由于各种不同的系统的架构不一样,后来又经过整合,所以我们现在的linux有多种内存共享方案,下面在介绍一种非常常用的系统V内存方案。本人首先再在上次的基础之上介绍一个网址http://www.360doc.com/content/080702/11/67071_1389854.html(国防科大的仁兄)本人在自己理解的基础上一步一步去深入转载 2012-04-24 16:15:59 · 2516 阅读 · 0 评论 -
用于并行计算的多线程数据结构,第 1 部分: 设计并发数据结构
简介现在,您的计算机有四个 CPU 核;并行计算 是最时髦的主题,您急于掌握这种技术。但是,并行编程不只是在随便什么函数和方法中使用互斥锁和条件变量。C++ 开发人员必须掌握的关键技能之一是设计并发数据结构。本文是两篇系列文章的第一篇,讨论如何在多线程环境中设计并发数据结构。对于本文,我们使用 POSIX Threads 库(也称为 Pthreads;见参考资料 中的链接),但是也可以转载 2012-04-16 13:34:49 · 883 阅读 · 0 评论 -
Linux内存点滴 用户进程内存空间
http://www.perfgeeks.com/?p=723 http://www.perfgeeks.com/?p=770 经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM,转载 2012-12-22 16:37:09 · 574 阅读 · 0 评论 -
linux下进程的最大线程数、进程最大数、进程打开的文件数
linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX这个限制可以在 /usr/include/bits/local_lim.h 中查看对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的转载 2012-12-22 17:22:05 · 674 阅读 · 0 评论 -
errno值
经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程序代码中包含 #include ,然后每次程序调用失败的时候,系统会自动用用错误代码填充errno这个全局变量,这样你只需要读errno这个全局变量转载 2013-02-21 09:32:40 · 567 阅读 · 0 评论 -
linux编译动静态库
Linux 版本是 Red Hat 9 ,内核版本是 2.4.18输入 which gcc 查看 gcc 的位置在 /usr/bin/gccgcc -v 查看 gcc 编译前的配置信息--prefix=/usr 说明了安装目录没有 --with-headers 说明默认的 include 就在安装目录下所以 gcc 默认的 include 目录是 /usr/include ,要转载 2013-05-31 09:30:28 · 806 阅读 · 0 评论 -
/usr/bin/ld: cannot find -l* 错误的解决方法
/usr/bin/ld: cannot find -l* 错误的解决方法原因:1.系统缺乏对应的库文件;2.版本不对应;3.库文件的链接错误;4.库文件路径设置问题解决办法:(原因1、2)方法一:可用yum install libtool-l*来安装yum -y install libtool-l*譬如:/usr/bin/ld: cannot fin转载 2013-05-31 10:20:00 · 7934 阅读 · 0 评论 -
Linux下通用线程池的创建与使用
Linux下通用线程池的创建与使用本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池目前的大多数网络服务器,包括Web转载 2013-07-09 11:21:36 · 941 阅读 · 0 评论 -
长连接与短连接
长连接与短连接所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。此种方式常用于P2P通信。所谓短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。 C/S通信比如http的,只是连接、请求、关闭,过程时间较短,服务器若转载 2012-04-04 16:24:18 · 2238 阅读 · 0 评论 -
IP数据包长度问题总结
这篇文章总结的不错,转自:http://hi.baidu.com/to_wait/blog/item/3e855931a5a51717eac4af22.html首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应转载 2012-04-04 15:44:25 · 869 阅读 · 0 评论 -
线程池的介绍及简单实现
简介: 服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实现。本文的标签: best_practices, java, 多线程, 应用开发标记本文!发布日期: 2002 年 8 月 22 日 级别: 初级 访问情况 : 115转载 2012-03-24 10:29:11 · 449 阅读 · 0 评论 -
Epoll工作模式详解----http://www.vimer.cn
我们目前的网络模型大都是epoll的,因为epoll模型会比select模型性能高很多, 尤其在大连接数的情况下,作为后台开发人员需要理解其中的原因。select/epoll的特点select的特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。但是如果连接很少的情况下, select和e转载 2012-03-23 20:12:38 · 639 阅读 · 0 评论 -
epoll精髓
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2012-03-23 20:34:58 · 450 阅读 · 0 评论 -
Socket send函数和recv函数详解
Socket send函数和recv函数详解2007年10月30日 星期二 16:31int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用se转载 2012-03-23 21:01:31 · 467 阅读 · 0 评论 -
Posix线程编程指南2-线程终止
这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线程库API。本文是第四篇将向您讲述线程中止。 1.线程终止方式 一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如转载 2012-03-25 18:29:55 · 351 阅读 · 0 评论 -
Posix线程编程指南(1)
线程创建1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。1转载 2012-03-25 18:48:13 · 348 阅读 · 0 评论 -
linux多线程-线程资源释放
般来说,对一段运行代码进行加锁然后解锁,如下所示: pthread_mutex_lock(&mutex); //运行代码; pthread_mutex_unlock(&mutex); 如果在运行代码这块发生错误,有异常,导致这个线程异常退出,那么怎么办,pthread_unlock没有得到调用,那么这个锁资源没有解锁。可以用下面的方法修改。 pthread_clean转载 2012-03-25 17:35:18 · 757 阅读 · 0 评论 -
再探Linux下的TCP延迟确认机制--TCP_QUICKACK
转载:http://pananq.com/index.php/2011/08/29/%E5%86%8D%E6%8E%A2linux%E4%B8%8B%E7%9A%84tcp%E5%BB%B6%E8%BF%9F%E7%A1%AE%E8%AE%A4%E6%9C%BA%E5%88%B6/案例一:某同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发N个132字节的包,然后连续收N个由后台服务回转载 2012-03-27 14:55:24 · 14218 阅读 · 1 评论 -
pthread_cancel-linux 终止其他线程
取消是一种让一个线程可以结束其它线程的机制。更好的是,一个线程可以对另一个线程发送一个结束的请求。依据设置的不同,目标线程可能会置之不理,可能会立即终止也可能会将它推迟到下一个取消点。当一个线程最终尊重了取消的请求,它的行为就像执行了pthread_exit(PTHREAD_CANCELED):所有的清理函数句柄以相反的次序被调用,线程终止函数被调用,最终结束线程的执行,并且返回PTHREAD转载 2012-03-29 10:17:36 · 2065 阅读 · 0 评论 -
[精华] 讨论 Setsockopt选项
有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 以下资料均从网上收集得到 getsockopt 和 setsockopt 获得套接口选项: int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 设置套接口转载 2012-03-29 17:13:19 · 569 阅读 · 0 评论 -
linux 多线程编程---- 信号量的使用
信号是E.W.Dijkstra在二十世纪六十年代末设计的一种编程架构。Dijkstra的模型与铁路操作有关:假设某段铁路是单线的,因此一次只允许一列火车通过。信号将用于同步通过该轨道的火车。火车在进入单一轨道之前必须等待信号灯变为允许通行的状态。火车进入轨道后,会改变信号状态,防止其他火车进入该轨道。火车离开这段轨道时,必须再次更改信号的状态,以便允许其他火车进入轨道。在计算机版本中,信号以简单整转载 2012-03-13 13:05:46 · 631 阅读 · 0 评论 -
关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:返回值 2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?阻塞与非阻塞write返回值没有区分,都是 0发送数据大小,特别:返回值 3、阻塞模式下read返回值 非阻塞模式下read返回值 0表转载 2012-03-31 09:09:27 · 772 阅读 · 0 评论 -
浅谈TCP/IP网络编程中socket的行为
转载:http://www.cnblogs.com/promise6522/archive/2012/03/03/2377935.html我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write)转载 2012-03-27 14:35:13 · 4013 阅读 · 0 评论 -
TCP/IP 应用程序的通信连接模式
socket连接超时的问题讨论区:http://www.chinaunix.net/jh/23/136566.html TCP/IP 应用程序的通信连接模式2011年05月06日 星期五 17:42TCP/IP 应用层与应用程序 TCP/IP 起源于二十世纪 60 年代末美国转载 2012-03-31 17:56:01 · 534 阅读 · 0 评论 -
Epoll模型详解
Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在 我用的2.6.15-25-386内核中,该值是1024,搜转载 2013-07-09 09:56:34 · 647 阅读 · 0 评论