
UNIX/LINUX C/C++
文章平均质量分 73
turkeyzhou
某互联网公司,从事服务器后台开发。
展开
-
LINUX 下多线程编程
Linux下的多线程编程1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还原创 2010-05-18 13:36:00 · 1030 阅读 · 0 评论 -
C语言实现ICMP协议Ping命令
大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。在这篇文章中,作者将介绍如何用C语言编写一个模拟ping命令功能的程序。ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。转载 2010-05-21 08:35:00 · 12114 阅读 · 3 评论 -
LINUX c++线程池框架
版权声明:原文地址及作者不详,如有侵权,请联系;本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池目前转载 2010-05-24 11:22:00 · 9811 阅读 · 4 评论 -
pthread 线程数据
在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线程库维护,称为线程私有数据(Thread-specific Data,或TSD)。原创 2010-07-20 16:01:00 · 1761 阅读 · 0 评论 -
LINUX系统编程之日历时间
LINUX中时间有两种:1)日历时间2)进程时间 日历时间顾名思义即用来获取日历; 主要涉及到的函数有: time(time_t*);stime(time_t*);tm* gmtime(time_t*);tm* localtime(time_t*);char *strftime(tm*);char *asctime(tm*);time_原创 2010-05-22 18:17:00 · 2305 阅读 · 0 评论 -
配置开发支持高并发TCP连接的Linux应用程序全攻略
原文见:http://www.cppblog.com/flashboy/articles/47012.html1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。转载 2010-05-28 14:29:00 · 1120 阅读 · 0 评论 -
纪一次TCP/IP连接关闭全程
TCP/IP众所周知在连接的时候,需要经历三次握手,而在终止的时候需要经历四次(有某些是以三次实现)握手才能“完美的”终止一次TCP/IP,因为TCP/IP的可靠性导致了一种互不信任的通信模式。故非此周折; TCP/IP三次握手过程。三次握手好理解。下面是TCP/IP关闭的四次握手流程图; 当一方发送close的时候,则向服务器发送一个FIN报文分节。得到服务器原创 2010-05-29 14:16:00 · 2737 阅读 · 0 评论 -
LINUX C++ REGEXP 正则表达式
在POSIX中,便有着支持正则表达式的系统函数。GNU/Linux有两套库可用于正则表达式编程:POSIX库和PCRE库。前者不需要单独安装,一般需求还是能满足的,速度稍慢些。后者是久负盛名的Perl正则表达式库,功能强大,匹配速度快,不过可能需要单独安装。 int regcomp (regex_t *compiled, const char *pattern, int cflags)原创 2010-05-31 01:01:00 · 6209 阅读 · 0 评论 -
深入浅析Linux库文件的搜索路径
本文主要讲解linux库文件,主要包含LD_LIBRARY_PATH 中指明库的搜索路径、在 /etc/ld.so.conf 文件中添加库的搜索路径等方面。转载 2010-05-31 17:15:00 · 633 阅读 · 0 评论 -
Linux Makefile介绍使用的环境深入浅出
Linux Makefile介绍使用的环境深入浅出原创 2010-05-31 17:25:00 · 1270 阅读 · 1 评论 -
LINUX 下动态,静态链接库实战
LINUX下面两种库的编译细节原创 2010-05-31 23:18:00 · 880 阅读 · 0 评论 -
Linux/Unix环境下的make和makefile详解
无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在转载 2010-05-31 13:50:00 · 880 阅读 · 0 评论 -
LINUX 库资料大全
linux有很多值得学习的地方,这里我们主要介绍linux库文件,经过搜集和整理linux库文件材料,在这里拿出来和大家分享一下,希望大家看后会有不少收获。转载 2010-05-31 17:26:00 · 974 阅读 · 0 评论 -
LINUX下用C连接MYSQL
LINUX下用C连接MYSQL原创 2010-06-08 14:54:00 · 1544 阅读 · 0 评论 -
MYSQL C API
C MYSQL API转载 2010-06-08 15:17:00 · 1024 阅读 · 0 评论 -
如何在linux下构建强大的build系统
在linux下,大多数开发者都有自己的一套编译系统,但是往往会存在编译依赖无法解决、无法很好的控制库的添加以及文件的添加,自定义的编译选项不是很方便得到控制,甚至连个打包都需要自己tar,这里我介绍一下我的一个开源的build框架。转载 2010-06-07 13:36:00 · 6039 阅读 · 0 评论 -
LINUX getopt处理命令行参数
LINUX getopt处理命令行参数转载 2010-08-05 00:45:00 · 1363 阅读 · 0 评论 -
setjmp和longjmp处理异常
实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式。后来为了更好地、更方便地支持异常处理编程机制,使得程序员在C语言开发的程序中,能写出更高效、更友善的带有异常处理机制的代码模块来。于是,C语言中出现了一种更优雅的异常处理机制,那就是setjmp()函数与longjmp()函数。转载 2010-09-12 10:53:00 · 1449 阅读 · 0 评论 -
STL中mem_fun和mem_fun_ref的用法
STL中mem_fun和mem_fun_ref的用法原创 2010-09-23 00:25:00 · 699 阅读 · 0 评论 -
STL中便捷的bitset
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:原创 2010-09-24 10:49:00 · 4157 阅读 · 0 评论 -
探索C++的秘密之详解extern "C"
探索C++的秘密之详解extern "C"原创 2010-10-05 11:01:00 · 624 阅读 · 0 评论 -
epoll和select/poll的区别
epoll和select/poll的区别转载 2010-10-05 12:50:00 · 725 阅读 · 0 评论 -
C++中的mutable
mutable深入理解原创 2010-10-04 09:51:00 · 650 阅读 · 0 评论 -
epoll的适应场景
epoll的适应场景原创 2010-10-10 09:02:00 · 1297 阅读 · 0 评论 -
字节对齐
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。转载 2010-10-21 23:56:00 · 639 阅读 · 0 评论 -
Linux下面CPU个数的几种方式
Linux下面获取CPU个数的几种方式原创 2010-10-24 12:17:00 · 11407 阅读 · 1 评论 -
MMORPG服务器架构雏形猜测
MMORPG服务器架构雏形猜测原创 2010-10-23 09:52:00 · 1008 阅读 · 0 评论 -
C语言中返回字符串函数的四种实现方法
C语言中返回字符串函数的四种实现方法原创 2010-12-29 02:54:00 · 66901 阅读 · 2 评论 -
C++的可以执行和跨平台开发
C++的可移植性和跨平台开发转载 2011-01-08 23:05:00 · 3817 阅读 · 0 评论 -
物理地址-线性地址-逻辑地址
物理地址-线性地址-逻辑地址转载 2010-11-16 14:01:00 · 1294 阅读 · 0 评论 -
signal和sigaction
sigaction实现signal原创 2011-01-16 14:09:00 · 2244 阅读 · 0 评论 -
UNIX 高手的 20 个习惯
Unix的几个好习惯转载 2011-01-19 13:22:00 · 756 阅读 · 0 评论 -
一些常用linux网络工具的经验共享--Tcpdump,Nmap,Netstat,nc
<br />Tcpdump-转储网络上的数据流<br /><br />Tcpdump能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。由于Tcpdump只能收集通过本机的数据,因此它的应用受到了一些限制,大多应用在网关或服务器自我检测上。例如,在作为网关的主机上,想知道本地网络中IP地址为192.168.0.5的主机现在与外界通信的情况,就可以使用如下命令:<br /><br />tcpdump -i eth0 src host 192.168.0.5<转载 2011-03-07 13:25:00 · 5463 阅读 · 1 评论 -
Tcpdump实例分析
Tcpdump实例分析原创 2011-03-07 14:10:00 · 2752 阅读 · 0 评论 -
Linux 汇编语言开发指南
<br />一、简介<br />作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。<br />大多数情况下 Linux 程序员不需要使用汇编语言,因为即便是硬件驱动转载 2011-03-17 01:54:00 · 614 阅读 · 0 评论 -
浅析 Linux 的国际化与本地化机制
我们从国际化与本地化的概念深入到 Linux 实现国际化与本地化机制的 glibc 源码,并尝试从多个角度理解 Linux 上的国际化与本地化机制的运作,最后我们还编写了一些示例,但仍有一些内容被我们忽略,如多语言化、X Window 系统的国际化环境等。另外,一个值得关注的项目是 uClibc,它是一个为嵌入式 Linux 设计的 C 库,相比于 glibc 小巧许多但功能及实现上稍有差异。转载 2011-04-10 23:25:00 · 1410 阅读 · 0 评论 -
守护进程与setsid
<br /><br />转自 : http://jiangshuiy.javaeye.com/blog/509534<br /><br />关键字: linux<br />守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd转载 2011-04-11 00:33:00 · 2012 阅读 · 1 评论 -
getrlimit,setrlimit函数
<br />getrlimit允许一个进程查询所受的的系统限制.这些系统限制通过一对硬/软限制对来指定。当一个软限制被超过时,进程还可以继续,当然这取决于限制的类型,同时一个信号会发送给进程。另一方面,进程不可以超过它的硬限制。软限制值可以被进程设置在位于0和最大硬限制间的任意值。硬限制值不能被任何进程降低,仅仅超级用户可以增加之。<br /> #include <sys/types.h><br /> #include <sys/time.h><br /> #includ转载 2011-04-11 01:49:00 · 1304 阅读 · 0 评论 -
关于SIGPIPE导致的程序退出
<br /> <br /><br /> 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。<br /> 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN<br /><br />转载 2011-04-12 22:16:00 · 691 阅读 · 0 评论 -
epoll精髓
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。转载 2011-04-18 00:49:00 · 656 阅读 · 0 评论