
linux C
文章平均质量分 78
byrsongQQ
这个作者很懒,什么都没留下…
展开
-
mmap函数用法及示例程序
UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。头文件: #include 函数:void *mmap(v转载 2010-05-18 18:18:00 · 820 阅读 · 0 评论 -
linux中select()函数分析
<br /><br />Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,转载 2011-05-24 18:57:00 · 804 阅读 · 0 评论 -
epoll_create, epoll_ctl和epoll_wait
<br />名词解释:man epoll之后,得到如下结果: <br /><br />NAME <br /> epoll - I/O event notification facility <br /><br />SYNOPSIS <br /> #include <sys/epoll.h> <br /><br />DEscrīptION <br /> epoll is a variant of poll(2) that can be used either as Edge转载 2011-05-24 17:29:00 · 889 阅读 · 0 评论 -
如何编写Linux Daemon后台程序(守护进程)
<br /><br />守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任 务。比如,作业规划进程crond,打印进程lpd等。<br />守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护进程的编程规则并不一致。这需要读者转载 2011-06-02 14:42:00 · 1196 阅读 · 0 评论 -
互斥信号量和二进制信号量的区别
<br />互斥型信号量必须是同一个任务申请,同一个任务释放,其他任务释放无效。同一个任务可以递归申请。<br /> <br /> 二进制信号量,一个任务申请成功后,可以由另一个任务释放。<br /> <br />二进制信号量实现任务互斥:<br /> 打印机资源只有一个,abc三个任务共享,当a取得使用权后,为了防止其他任务错误地释放了信号量(),必须将打印机房的门关起来(进入临界段),用完后,释放信号量,再把门打开(出临界段),其他任务再进去打印。(而互斥型信号量由于必须由取得信号量转载 2011-04-12 18:07:00 · 1364 阅读 · 0 评论 -
读写锁
<br />特性:<br /> 读写锁也叫共享——排他锁,因为有3种状态, 所以可以有更高的并行性。使用mutex,它的状态要么处于锁住和未锁状态,只有一个线程可以上锁。而读写锁有更多的状态:在读状态锁住,在写状态锁住,未锁住。只有一个线程可以获得写锁,多个线程可以同时获得读锁。<br />• 当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞。 <br />• 当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线程都可以得到访问权, 但转载 2011-04-14 16:01:00 · 1091 阅读 · 0 评论 -
TCP三次握手/四次挥手详解
<br />1、建立连接协议(三次握手)<br />(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。<br />(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。<br />(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。<br />2、连接终止协议(四次挥手)<br /> 由于TCP连接是全转载 2011-04-28 14:37:00 · 962 阅读 · 0 评论 -
http请求的详细过程
<br />http://www.yuanma.org/data/2009/1009/article_3949.htm<br />一个http请求的详细过程<br />我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切。<br />首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。<br />1.连接 当我们输入这样一个请求时,首先要建立一个socket转载 2011-04-28 14:34:00 · 1006 阅读 · 0 评论 -
linux中编译静态库(.a)和动态库(.so)的基本方法
静态库 在linux环境中, 使用ar命令创建静态库文件.如下是命令的选项: d -----从指定的静态库文件中删除文件 m -----把文件移动到指定的静态库文件中 p -----把静态库文件中指定的文件输出到标准输出 q -----快速地把文件追加到静态库文件中 r转载 2011-06-30 22:38:00 · 1164 阅读 · 0 评论 -
gcc -l参数和-L参数
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了 好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-lte转载 2013-09-22 10:53:23 · 985 阅读 · 0 评论 -
unix中的PV原语
<br />PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。<br /><br />信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。<br /><b转载 2011-02-12 14:23:00 · 1042 阅读 · 0 评论 -
内存映射文件原理探索
一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在转载 2011-01-25 18:41:00 · 2532 阅读 · 1 评论 -
Valgrind 使用简单说明
Valgrind 介绍 <br /><br />Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Valgrind的主要功能<br />Valgrind工具包包含多个工具,如转载 2010-07-15 16:00:00 · 655 阅读 · 0 评论 -
libcurl的使用
curl->libcurl的手册可以查看http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEDATA译者:JGood(http://blog.youkuaiyun.com/JGood ) 译者注:这是一篇介绍如何使用libcurl的入门教程。文档不是逐字逐句按原文翻译,而是根据笔者对libcurl的理解,参考原文写成。文中用到的一些例子,可能不是出自原文,而是笔者在学习过程中,写的一些示例程序(笔者使用的libcurl版本是:7转载 2010-07-20 17:54:00 · 2272 阅读 · 0 评论 -
core dump的生成与调试
<br /><br />先看看我用的是个什么机器:<br />$ uname -a<br />Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux<br />再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。<br />$ ulimit -a<br />core file size (blocks, -c) 0<br />data s原创 2010-07-22 11:25:00 · 750 阅读 · 0 评论 -
线程安全与线程不安全
<br /><br />线程安全是针对多线程来讲的,如果所使用的公用变量在多线程下没有被保护机制时,变量结果会和理论值不一致,这样就叫作线程不安全,相反公用变量在保护机制下工作,就不会出现“随机”变化,这时叫线程安全。 <br /> <br /> 线程安全: 在多线程中使用时,不用自已做同步处理. <br /> 线程不安全: 在多线程中使用时, 必须做线程同步,不然会有未知后果. <br /> <br /> 首先要明白线程的工作原理,jvm有一个main memory,转载 2010-07-22 13:45:00 · 658 阅读 · 0 评论 -
mmap函数用法及示例程序
<br /><br />UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:<br />1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;<br />2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;<br />3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。<br /><br /><br />头文件:<br /> #include <sys/mman.h><br /转载 2010-07-22 17:05:00 · 828 阅读 · 0 评论 -
valgrind测试内存泄露
valgrind内存检测中五种内存丢失的解释结果示例:LEAK SUMMARY:definitely lost: 140 bytes in 5 blocks.indirectly lost: 1,252 bytes in 41 blocks.possibly lost: 0 bytes in 0 blocks.still reachable: 36 bytes in 1 blocks.suppressed: 0 bytes in 0 blocks.1) still reachable: 表示泄漏的内存在程序转载 2010-09-13 17:00:00 · 12360 阅读 · 0 评论 -
C++中socket编程基础详解
<br />对于SOCKET在这里我不想究其历史,我只想说其时它是一种进程通讯的方式,简言之就是调用这个网络库的一些API函数就能实现分布在不同主机的相关进程之间的数据交换.<br />SOCKET中首先我们要理解如下几个定义概念:<br /> 一是IP地址:IP Address我想很容易理解,就是依照TCP/IP协议分配给本地主机的网络地址,就向两个进程要通讯,任一进程要知道通讯对方的位置,位置如何来确定,就用对方的IP<br /> 二是端口号:用来标识本地通讯进程,方便OS提交数据.就是说进程指定了原创 2010-09-16 13:43:00 · 10897 阅读 · 0 评论 -
Linux系统日志segment分析
<br /><br />Linux系统日志下segment fault<br />1. 系统日志分析——得出大概的错误类型:<br />Linux下载下来的系统日志:<br />192.168.196.155 Dec 1 15:11:00 adapi196155 kernel: ad_calc_server[9341]: segfault at 00002a00cfbf1e80rip 0000003ad10b7672 rsp 00002aad4cf1ceb8 err转载 2010-12-03 15:46:00 · 2130 阅读 · 0 评论 -
网络编程常见问题总结
<br />网络编程常见问题总结 串讲(一)<br />7 R3 m( C6 v4 b* a6 G/ b5 q# Q网络编程常见问题总结 6 I& I! E- x8 Z+ p- U- B<br /> 在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出. . e3 Y0 @* _- e1 G- B% R<br /> 对于网络编程的更多详细说明建议参考下面的书籍 <br />$ Y+ D0 [% j.转载 2010-10-26 16:26:00 · 3137 阅读 · 0 评论 -
C/C++随机数生成 rand() srand()
转载自 http://www.cnblogs.com/caosiyang/archive/2012/07/03/2575236.html随机数包括伪随机数和物理随机数,我要说的是使用rand()和srand()生成伪随机数,尽管是伪随机,也能满足大部分要求。 #include int rand(void);返回一个伪随机数,范围是0-RAND_MA转载 2013-10-31 13:52:50 · 1554 阅读 · 0 评论