08 2011 档案

摘要:TCP穿越挪动窗口的观念来举行流量扼制。假象在发送端发送数据的速度很快而接收端接收速度却很慢的情形下,为了保证数据不失落,显明必需举行流量扼制, 调停睦通信双边的工作节奏。所谓挪动窗口,能够会意成接收端所能供给的缓冲区大小。TCP利用一个挪动的窗口来告诉发送端对它所发送的数据能供给多大的缓 冲区。由于窗口由16位bit所定义,因而接收端TCP 能最大供给65535个字节的缓冲。由此,能够利用窗口大小和第一个数据的序列号计算出最大可接收的数据序列号。挪动窗口性质上是描写接受方的TCP数据报缓冲区大小的数据,发送方依据这个数据来计算自己最多能发送多长的数据。万一发送方收到接受方的窗口大小为0的TC 阅读全文
posted @ 2011-08-31 14:38 hnrainll 阅读(5650) 评论(0) 推荐(1)
摘要:TCP协议只定义了一种报文格式建立、拆除连接、传输数据使用同样的报文TCP报文格式TCP报文段首部(20个字节)源端口和目的端口:各占2个字节,16比特的端口号加上32比特的IP地址,共同构成相当于传输层服务访问点的地址,即“插口”;这些端口可用来将若干高层协议向下复用;序号字段和确认序号字段:序号:占4个字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400;确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号 阅读全文
posted @ 2011-08-31 14:11 hnrainll 阅读(18087) 评论(0) 推荐(0)
摘要:/*poll实现的echo服务器.Author:thinkmay*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <poll.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <errno.h>#defin 阅读全文
posted @ 2011-08-31 10:57 hnrainll 阅读(417) 评论(0) 推荐(1)
摘要:好像很花心、其实很专一 好像很坚强、其实比谁都要脆弱 好像很开心、可是笑容背后的哀伤谁又能懂…… 其实很多时候 有些80后的人都是在自我折磨 明明很爱很爱对方 却宁愿心痛的死掉 也选择放手 然后转身离开 任眼泪随意放肆…… 其实很多时候 这些80后的人很好懂 他们很害怕孤单 因为一个人的时候 他们会胡思乱想 他们会想起那个没有结局的故事 会想起那个模糊却又清晰的脸庞 因为一个人的时候 他们会觉得很没安全感 他们的要求总是那么的低 只要爱着的那个人陪着他们就好…… 其实很多时候 80后的这一类人都很敏感 都很容易猜疑 一个眼神、一个动作 都会让... 阅读全文
posted @ 2011-08-31 10:23 hnrainll 阅读(255) 评论(0) 推荐(0)
摘要:I/O 复用的能力: 如果一个或多个 I/O 条件满足(例如,输入已准备好被读,或者描述字可以承接更多的输出)时,我们就被通知到。I/O 复用由函数 select 和 poll 支持。I/O 复用典型的应用场合:a. 当客户处理多个描述字(一般是交互式输入和网络套接口),必须使用 I/O 复用;b. 一个客户同时处理多个套接口[较少出现];c. TCP 服务器既要处理监听套接口,又要处理已接套接口;d. 服务器既要处理 TCP,又要处理 UDP;e. 服务器要处理多个服务或多个协议[例如inetd守护进程]。Unix 下五个 I/O 模型:1. 阻塞的 I/O 模型 最流行的 I/O 模型,缺 阅读全文
posted @ 2011-08-31 10:04 hnrainll 阅读(904) 评论(0) 推荐(0)
摘要:Linksys Wireless-G Router (model WRT54G),Cisco / Linksys 在2003年发行的这款无线路由器使用802.11g标准使得带宽在理论上能够达到54M(2003年的时候),相对于当时业界普遍使用802.11b的11M带宽,不能不说实现了一次飞跃。它可以通过自带的DSL / Cable接口接入宽带互联网,对于内网则支持4个以太网交换与无线广播接入。 2005年初国内开始销售这款路由器。国外销售价格大概为$60,相对于其他产品来说的话就跟摆地摊的货差不多了。好了,不谈这些参数的问题。关键是:同年有好事者在 Linux Kernel Mailing L 阅读全文
posted @ 2011-08-31 09:56 hnrainll 阅读(581) 评论(0) 推荐(0)
摘要:2011年全国大学生电子设计竞赛试题下载--来自官网http://bbs.eeworld.com.cn/thread-300613-1-1.html 阅读全文
posted @ 2011-08-31 08:29 hnrainll 阅读(620) 评论(0) 推荐(0)
摘要:网络各层设备 一层设备:中继器(repeater),集线器(hub) 主要功能就是对信号进行放大和整形。我们可以认为这样滴设备就是一条线缆一样。那么只 不过这条线缆具有信号滴放大和整形滴作用 在总线型网络中,避免冲突滴方式是一种叫做CSMA/CD滴东东 二层设备:网桥(Bridge),交换机(switch)。 区别: 1.网桥是靠软件实现滴,交换机靠ASIC硬件实现。所以交换机滴转发效率要比网桥快很多。 2.网桥最多支持16个端口,交换机理论上可以无限支持。 3.网桥分成很多种类,而交换机只是实现其中滴一个功能,就是透明网桥。 二层设备对于一层设备来说,提升滴功能就是可以认识二层地址了(二层地 阅读全文
posted @ 2011-08-30 19:29 hnrainll 阅读(5512) 评论(0) 推荐(0)
摘要:很多读者也许都听说过Linux操作系统,知道它是和Windows抗衡的另一大流派的操作系统。但大家也许不知道,Linux极其灵活,不仅可以运行在大型服务器、台式机之上,也可以运行在各种小型终端设备,这其中就包括无线路由器。DD-WRT其实就是一个供无线路由器使用的嵌入版Linux,它可以在普通的家用无线路由器实现数千元的商用无线路由器功能,不仅如此,对于高手它甚至可以允许自行编译程序,自由扩展无线路由器功能。DD-WRT的起源要追溯到2003年,当时Cisco/Linksys发售了WRT54G无线路由器,它支持当时最高54Mbps的连接速度。同年有爱好者发现WRT54G的IOS固件是基于Lin 阅读全文
posted @ 2011-08-30 18:59 hnrainll 阅读(1588) 评论(0) 推荐(0)
摘要:路由器系统是硬件和软件的结合体,硬件用的可以是ARM内核或者MIPS内核,或者是PPC,或者是Intel的CPU。这个核心部分相当于我们使用的PC的CPU。一台PC一般只要一个网卡,但是路由器需要多个网卡。现在大部分PC的网卡是通过PCI总线连接到CPU的总线的,所有的数据交换都需要通过CPU的处理。而路由器的设计,网卡一般直接连接到数据总线上,比PC的PCI连接效率要高很多,一些高级的路由器的网卡采用了专用的芯片,芯片上有数据处理器,网卡和网卡之间的数据传送不需要CPU参与太多。路由器系统除了CPU,网卡以外,还有flash,和内存。Flash相当于PC的硬盘,内存当然是相当于PC的内存了。 阅读全文
posted @ 2011-08-29 22:07 hnrainll 阅读(542) 评论(0) 推荐(0)
摘要:1.1 Ethernet II协议简介 以太网是当今现有局域网采用的最通用的通信协议标准。该标准定义了在局域网中采用的电缆类型和信号处理方法。EthernetII由DEC,Intel和Xerox在1982年公布其标准,Etherent II主要更改了EthernetI的电气特性和物理接口,在帧格式上并无变化。Etherent II采用CSMA/CD的媒体接入和广播机制。1.2 Ethernet II报头详解 Ethernet II协议报头结构 每个字段的详细解释如下: --目标地址:此数据包的目标MAC地址。 --源地址:此数据包的源MAC地址。 --协议类型:上层协议,表示网络层... 阅读全文
posted @ 2011-08-29 09:04 hnrainll 阅读(8088) 评论(0) 推荐(1)
摘要:常见以太网帧结构详解1 以太网相关背景以太网这个术语通常是指由DEC,Intel和Xerox公司在1982年联合公布的一个标准,它是当今TCP/IP采用的主要的局域网技术,它采用一种称作CSMA/CD的媒体接入方法。几年后,IEEE802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络;此三种帧的通用部分由802.2标准来定义,也就是我们熟悉的802网络共有的逻辑链路控制(LLC)。由于目前CSMA/CD的媒体接入方式占主流,因此本文仅对以太网和IEEE 802.3的帧格式作详细的分析。在TCP/IP世界中,以太网 阅读全文
posted @ 2011-08-29 09:02 hnrainll 阅读(1540) 评论(0) 推荐(0)
摘要:TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要。从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。但是,如果想要在这个领域达到融会贯通的地步,不打下坚实的基础是不可想象的。正如Richard Stevens在TCP/IP Illustrated中所说,在网络编程领域,开发者所遇到的实际问题中,大约有90%都与开发者对于TCP/IP的理解相关。高层的框架和控件总结了TCP/IP的主要使用模式,并. 阅读全文
posted @ 2011-08-29 06:20 hnrainll 阅读(1335) 评论(0) 推荐(2)
摘要:1、被时间检验过的代码,有价值。2、反映需求的代码,有价值。3、在实践中修改过的代码,有价值。4、容易被阅读、容易被理解、容易被修改的代码,价值翻倍。——————————————————————1、设计本身一文不值。好的设计可以通过上述第4条起间接作用。同时好的设计也是改出来的,不是想出来的。2、没有修改过的代码可能有价值……吧。概率太低了。3、设计从来不是热点,需求才是。——————————————————————程序设计的世界有两个神,一个叫做变化,一个叫做无解。紧紧跟随变化之神的脚步,并且谨记“没有银弹”而对问题之神保持谦卑,是应有的态度。 阅读全文
posted @ 2011-08-28 20:04 hnrainll 阅读(296) 评论(0) 推荐(0)
摘要:首先感谢一些朋友阅读我的拙作《你是一个优秀的IT PRO吗?(上篇)》才使得我有动力写出这个下篇。在上篇中,我只是简单的总结了几条,要成为优秀的IT PRO所需要注意的几点,在这片文章中,我将根据我自己的心得,总结和归纳优秀的IT PRO是如何做的。所以下篇的主题是:优秀的IT PRO是如何做的?一、优秀的IT PRO应非常清楚自己的职责和岗位。 无论你是一个普通的职员型的IT PRO,还是一个具有领导权力的IT PRO,优秀的IT PRO都应该非常清楚自己的岗位和职责。如何清楚呢?我给分了四类:1、必须做的:所谓必须做的,就是你的公司手册中描述你岗位职责的那一部分。优秀的IT PRO必须主动 阅读全文
posted @ 2011-08-27 11:39 hnrainll 阅读(303) 评论(0) 推荐(0)
摘要:所谓IT PRO:全称是 IT Professional,从字面意思上来说是指IT专业人士,泛指IT领域内的所有精专于IT某一领域的人士,这当然不局限于是大公司或者小公司,也不局限于您的职业及所学的基础学科。 目前在微软的领域而言,通常将除编程以外的专业人士,称为ITPro。通常见到的人群是在企业中从事IT规划、架构、部署、维护和管理等工作的一类人员,他们通常在职位中的职位是CIO、CTO、IT经理、系统架构师、系统工程师、安全工程师、支持工程师、数据库管理员、网络管理员等。---以上摘自百度百科正所谓,闻道有先后,术业有专攻。我想绝大部分的从事该领域的人员都梦想成为一名优秀的专业人士。那么. 阅读全文
posted @ 2011-08-27 11:37 hnrainll 阅读(444) 评论(0) 推荐(0)
摘要:51CTO著名专家老刘,连发了两篇博文,老刘的博客http://2844337.blog.51cto.com/都是劝谏我们年轻人不要浮躁。两篇文章用故事教育我们一定不要浮躁,但是如何做到不浮躁,老刘没有说。我想借着这个主题,简单谈一下自己的认识。一、现代的年轻人为什么会浮躁?实际上要回答这个问题,是要考虑到人的外因和内因。关于外因,就是外部环境的对人自身的影响。这个问题,老刘的博文《天下没有永远新鲜的工作》,以下简称《天下》已经阐述了。我想简单小结一下。就是现在社会大城市下的高速发展及人们的快节奏生活、经济发展的不平衡等因素早就了外因。那么内因是来自人的本身。实际上,容易产生浮躁情绪的都是年轻 阅读全文
posted @ 2011-08-27 10:46 hnrainll 阅读(4897) 评论(1) 推荐(0)
摘要:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://z00w00.blog.51cto.com/515114/522039我一直想帮助新入行的朋友建立一个知识结构,但是一直也没有想好怎么写。在我之前的文章中,我曾提到了,从事计算机IT PRO,需要建立自己的知识结构。这方面的文章,估计介绍的很少,需要作者丰富的行业阅历。在这方面,本人也觉得资历不够,不过还是想写一写,算是抛砖引玉吧。首先给从事计算机的工作来一个分类。根据医学家的介绍,人的大脑实际上是两半,左脑控制逻辑和语言,右脑控制感知和创造。好了,回到我们的正题,计算机工作我也分 阅读全文
posted @ 2011-08-27 10:39 hnrainll 阅读(377) 评论(0) 推荐(0)
摘要:由于做项目的需要和自己的爱好,最近在找关于无线路由器的资料,找到了些相关的资料,在这里总结一下。一、无线路由器与无线AP的区别(资料来源:详谈无线路由器与无线AP的区别)AP为Access Point简称,一般翻译为“访问节点”,无线AP主要是提供无线工作站对有线局域网和从有线局域网对无线工作站的访问,在访问接入点覆盖范围内的无线工作站可以通过它进行相互通信。通俗的讲,无线AP是无线网和有线网之间沟通的桥梁。当前的无线AP可以分为两类:单纯型AP和扩展型AP。单纯型AP的功能相对比较简单,缺少路由功能,只能当无线集线器。它相当于一个无线交换机,接在有线交换机或路由器上,为跟它连接的无线网卡从路 阅读全文
posted @ 2011-08-27 00:56 hnrainll 阅读(7434) 评论(0) 推荐(4)
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/select.h>int main(int argc,char *argv[]){ char buf[100] = ""; fd_set rset; //select集合 FD_ZERO(&rset); //将集合清0 FD_SET(0, &rset); //将标准输入加入到集 阅读全文
posted @ 2011-08-26 21:32 hnrainll 阅读(446) 评论(0) 推荐(0)
摘要:下载地址:http://wenku.baidu.com/view/cd1c0819964bcf84b9d57b56.html讲的很好! 阅读全文
posted @ 2011-08-26 20:31 hnrainll 阅读(945) 评论(0) 推荐(0)
摘要:C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register) 局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。8.8.1 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。例 阅读全文
posted @ 2011-08-26 20:10 hnrainll 阅读(7583) 评论(1) 推荐(2)
摘要:很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多数时候,我发现问这些问题的朋友都有两个特点:1)对Unix有畏难心理,对其没有信心;2)喜欢用拿Windows来和Unix做比较。这两种特点就像两个“心理暗示”,暗示着自己Unix很不好学,暗示着Unix很糟糕,不如Windows好。于是,自己也就被自己的这种长期的“暗示” 所催眠了。因为,从一开始就有畏难情绪,所以也就觉得Unix不好,觉得非常很吃力,最后还会导致对Unix的厌恶和反感的情绪。所以,为了纠正上述朋友 们的“心理暗示”。我想写下这篇文章,想告 阅读全文
posted @ 2011-08-26 19:17 hnrainll 阅读(418) 评论(1) 推荐(1)
摘要:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://ixdba.blog.51cto.com/2895551/569329一、 选择适合自己的linux发行版谈到linux的发行版本,太多了,可能谁也不能给出一个准确的数字,但是有一点是可以肯定的,linux正在变得越来越流行, 面对这么多的Linux 发行版,打算从其他系统转到linux系统来的初学者可能会感到困惑,即便是忠实的 Linux 用户也没有时间和精力去挨个尝试,因此初学者在学习linux的之前,需要有一个明确的方向,选择一个适合自己的系统开始学习linux至关重要!下面 阅读全文
posted @ 2011-08-26 14:20 hnrainll 阅读(1161) 评论(0) 推荐(0)
摘要:#include <netdb.h> #include <sys/socket.h> struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。 struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; #define h_addr 阅读全文
posted @ 2011-08-24 10:00 hnrainll 阅读(774) 评论(0) 推荐(0)
摘要:信号量与线程互斥锁的区别“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务 并不一定是锁定某一资源,还可以是进行一些计算或 阅读全文
posted @ 2011-08-23 16:47 hnrainll 阅读(1851) 评论(1) 推荐(1)
摘要:1.存储目录中的文件信息(文件名、扩展名等等)#include <dirent.h>struct dirent{ long d_ino; /* inode number 索引节点号 */ off_t d_off; /* offset to this dirent 在目录文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */ char d_name [NAME_MAX+1]; /* file name 阅读全文
posted @ 2011-08-23 15:30 hnrainll 阅读(24348) 评论(0) 推荐(2)
摘要:§3.8扫描目录Linux系统上一个常见问题就是对目录进行扫描,也就是确定一个特定目录下存放的文件。在shell程序设计中,这很容易做到——只需让shell做一次表达式的通配符扩展。过去,UNIX操作系统的各种变体都允许用户通过编程访问底层文件系统结构。我们仍然可以把目录当作一个普通文件那样打开,并直接读取目录数据项,但不同的文件系统结构及其实现方法已经使这种办法没什么可移植性了。现在,一整套标准的库函数已经被开发出来,使得目录的扫描工作变得简单多了。与目录操作有关的函数在dirent.h头文件中声明。它们把一个名为DIR的结构作为目录操作的基础。被称为“目录流”的指向这个结构的指针 阅读全文
posted @ 2011-08-23 15:24 hnrainll 阅读(3604) 评论(0) 推荐(0)
摘要:HP大中华区总裁孙振耀退休感言 : 如果这篇文章没有分享给你,那是我的错。 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我。 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个“茫”人了。 如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就会感叹自己的年少无知。 如果你看完了,觉得很有道理,然后束之高阁,继续走进拥挤的地铁,依然用着自己昨日的观念来思考自己的未来,你的人生也将继续重复着昨日的状况。 如果你看完了,觉得那是一个过来人,对你的人生忠告,并你也愿意用他告诉你的思想去指导自己今后的 阅读全文
posted @ 2011-08-22 19:02 hnrainll 阅读(421) 评论(0) 推荐(0)
摘要:1、tcp和udp都能发送0字节的数据包,windows下通过GetLastError查看返回值为02、tcp发送0字节的数据包后,接收方调用recv不会接收到该数据包3、udp发送0字节的数据包后,接收方调用recvfrom能够接收到该数据包转自:http://blog.csdn.net/wzx19840423/article/details/6643094 阅读全文
posted @ 2011-08-20 20:23 hnrainll 阅读(1721) 评论(0) 推荐(0)
摘要:客户和服务器通过调用函数bind时可以指定IP地址或端口号,可以都指定,也可以都不指定,根据期望的结果,对sin_addr和sin_port,或sin6_addr和sin6_port应置为什么值,下面做了总结:l 客户端1. TCP客户端:1) 当TCP客户未绑定IP地址,当它调用connect时内核会根据外出接口给它绑定一个IP地址和一个临时端口号。并且TCP服务器在接到这个连接后会以这个IP地址作为回应数据报的目的IP地址。2) 当TCP客户绑定了IP地址,它就为发出的数据连接指定了一个源IP地址,并且TCP服务器在接到这个连接后会以这个IP地址作为回应数据报的目的IP地址。3) TCP客 阅读全文
posted @ 2011-08-20 18:32 hnrainll 阅读(5056) 评论(0) 推荐(0)
摘要:1. 基础概念篇1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文 阅读全文
posted @ 2011-08-19 10:10 hnrainll 阅读(699) 评论(0) 推荐(0)
摘要:“端口”,通俗地讲就是一个通信通道的“门”,各种计算机服务和通信都是通过特定的端口与外部计算机进行通信,像常见的WWW、FTP、Telnet服务一样。随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术。因为在TCP/IP协议中引入了一种称之为“Socket”(套接字)应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信。 阅读全文
posted @ 2011-08-18 17:31 hnrainll 阅读(9384) 评论(0) 推荐(0)
摘要:Linux stat函数讲解表头文件: #include <sys/stat.h> #include <unistd.h>定义函数: int stat(const char *file_name, struct stat *buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno错误代码: ENOENT 参数file_name指定的文件不存在 ENOTDIR 路径中的目录存在但却非真正的目录 ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接 EFAUL 阅读全文
posted @ 2011-08-17 20:58 hnrainll 阅读(775) 评论(0) 推荐(0)
摘要:进程就好比人一样有其生命,我们通过fork()函数来创建一个进程,那么我们又是如何来中止进程呢。 进程退出 1.在Linux中任何让一个进程退出 进程退出表示进程即将结束。在Linux中进程退出分为了正常退出和异常退出两种。 1>正常退出 a. 在main()函数中执行return 。 b.调用exit()函数 c.调用_exit()函数 2>异常退出 a.调用about函数 b.进程收到某个信号,而该信号使程序终止。 Tiger-John说明:不管 是那种 退出方式,系统最终都会执行内核中的同一代码。这段代码用来关闭进程所用已打开的文件描述符,释放它所占用的内存和其他资源。 3& 阅读全文
posted @ 2011-08-17 08:55 hnrainll 阅读(31156) 评论(5) 推荐(5)
摘要:你已经学习了如何在你的程序中定义一次函数而重用代码。如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块。模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们将学习如何使用标准库模块。使用sys模块例8.1 使用sys模块#!/usr/bin/python # Filename: using_sys.pyimport sysprint 'The command line arguments a 阅读全文
posted @ 2011-08-17 08:32 hnrainll 阅读(47247) 评论(1) 推荐(1)
摘要:所谓的开放API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网站服务封装成一系列API(Application Programming Interface,应用编程接口)开放出去,供第三方开发者使用,这种行为就叫做开放网站的API,所开放的API就被称作OpenAPI(开放API)。 网站提供开放平台的API后,可以吸引一些第三方的开发人员在该平台上开发商业应用,平台提供商可以获得更多的流量与市场份额,第三方开发者不需要庞大的硬件与技术投资就可以轻松快捷的创业,从而达到双赢的目的,开放API是大平台发展、共享的途径,让开发者开发一个有价值应用,付出的成本更少,成功的机会. 阅读全文
posted @ 2011-08-16 21:19 hnrainll 阅读(341) 评论(0) 推荐(0)
摘要:功能描述:发送消息。send只可用于基于连接的套接字,send 和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。 用法: #include <sys/types.h>#include <sys/socket.h> ssize_t send(int sock, const void *buf, size_t len, int flags);ssize_t sendto(int sock, const v 阅读全文
posted @ 2011-08-16 20:39 hnrainll 阅读(7516) 评论(0) 推荐(0)
摘要:recv,recvfrom,recvmsg函数用于从套接字接收信息。 ssize_t recv (int s, void *buf, size_t len, int flags); ssize_t recvfrom (int s, void * restrict buf, size_t len, int flags, struct sockaddr * restrict from, socklen_t * restrict fromlen); ssize_t recvmsg (int s, struct msghdr *msg, int flags);recvfrom和recvmsg系统调用用 阅读全文
posted @ 2011-08-16 20:38 hnrainll 阅读(1736) 评论(0) 推荐(0)
摘要:在一般的socket实现的时候,通常是用参数的形式,将文件描述符(FD)传到子进程或者直接传到read()汉书中。不过如果想以Socket的形式,来传送FD的话,那就要用到sendmsg和recvmsg函数了。关键点,FD的值要通过msg.msg_control来传递的,千万别写到传输用的buff里面,那样做只是简单的传值,没有任何意义的。/*------------------------------------------------- server-------------------------------------------------*/#include <stdio.h 阅读全文
posted @ 2011-08-16 20:38 hnrainll 阅读(2428) 评论(0) 推荐(0)
摘要:本程序是recvmsg()函数的简单应用:/* ************************************************************************ * Filename: msg.c * Description: * Version: 1.0 * Created: 2011年08月16日 20时07分52秒 * Revision: none * Compiler: gcc * Author: YOUR NAME (), * Company: * **************************************************** 阅读全文
posted @ 2011-08-16 20:35 hnrainll 阅读(5292) 评论(1) 推荐(0)
摘要:名字 recv, recvfrom, recvmsg - 从套接口接收一个消息 概要#include <sys/types.h>#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);描述recvfrom和recvmsg()用 阅读全文
posted @ 2011-08-16 20:00 hnrainll 阅读(10358) 评论(0) 推荐(0)
摘要:导读:本文是从《The Singular Secret of the Rockstar Programmer》这篇文章翻译而来。译文来自外刊IT评论《编程巨星的唯一秘诀》。内容如下:别以为是那些软件开发定律,别以为是开发出那些特殊用途的软件,别以为是软件设计技术本身。只有一条真理决定了一个软件程序员的成功还是失败。由于坚持这个真理,一个资深的程序员能在一天的时间里学会一门新的编程语言,而由于不坚持这条真理,一个初级的程序员用十年时间也只能挣到一份糊口的钱、永远是来实现别人的设计、永远不够优秀而得不到晋升的机会。这条真理让你看清了差的程序员和好的程序员的不同之处,好的程序员和伟大的程序员的不同之 阅读全文
posted @ 2011-08-16 19:06 hnrainll 阅读(293) 评论(0) 推荐(2)
摘要:1、open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,fopen是C的库函数,返回的是一个指向文件结构的指针。2、fopen的实现要调用open, 关键看你想返回什么了, FILE指针还是描述符? 3、32位环境下,编译加“-D_FILE_OFFSET_BITS=64” 要在open里加O_LARGEFILE标记 [code]static int ext2_open_file (struct inode * inode, struct file * filp){ if (!(filp->f_flags & O_LARGEFILE) && 阅读全文
posted @ 2011-08-16 17:57 hnrainll 阅读(3207) 评论(1) 推荐(0)
摘要:昨天在《C Programming FAQs》上看见了一段类似的代码,刚刚在CSDN问了,又Google了一下,整理下来。代码:#include <stdio.h>FILE *myfopen(char *name){FILE *fp=fopen(name,"w");fprintf(fp,"abcdefg");return fp;}int main(){FILE *fptr=myfopen("example.txt");fprintf(fptr,"ABCDEFG");fclose(fptr);return 阅读全文
posted @ 2011-08-16 17:52 hnrainll 阅读(929) 评论(0) 推荐(0)
摘要:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://phoenixtoday.blogbus.com/logs/45855234.html 最近小组里有一些关于REST API设计的讨论,有些收获,打算在这里写一下。通常来讲设计第一个版本的REST API并不难,难点在于将来你要改变了这些API,而客户那里已经有对应的客户端实现, 那么你怎么保证兼容?或者,至少,你应当让这些东西失效吧,这样客户才能知道。所以基本上就是两个问题。1,在最初设计时,如何尽量保证向后兼容?(这里不提倡过度设计噢,我们是搞敏捷的,哈哈)2,如果API发生了改变,该怎么通知已有实现?对于第一个 阅读全文
posted @ 2011-08-16 12:04 hnrainll 阅读(2286) 评论(1) 推荐(0)
摘要:代理服务器,英文名叫Proxy Server,在日常网络中有很多用途,这里把我们所熟悉的一些作用总结和分析一下,分类说明: 一、共享网络 最常见的可能是用代理服务器共享上网,很多人不知不觉中就在用,比如通过sygate,wingate,isa,ccproxy,NT系统自带的网络共享等,可以提供企业级的文件缓存、复制和地址过滤等服务,充分利用局域网出口的有限带宽,加快内网用户的 访问速度,可以解决仅仅有一条线路一个IP,IP资源不足,带局域网很多用户上网的功能,同时可以做为一个防火墙,隔离内网与外网,并且能提供监控网络和记录传输信息的功能,加强了局域网的安全性,又便于对上网用户进行管理。 二、访 阅读全文
posted @ 2011-08-16 11:03 hnrainll 阅读(510) 评论(0) 推荐(0)
摘要:首先要安装这个库,其次,要把需要的协议加上,./configure --enable-smtp --enable-pop3makemake install使用curl --version 查看使用版本是否一样smtp代码实例: ################################################################################include <stdio.h> #include <curl/curl.h>size_t read_data(void *ptr, size_t size, size_t nmemb, 阅读全文
posted @ 2011-08-16 10:48 hnrainll 阅读(1726) 评论(0) 推荐(1)
摘要:larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。Larbin只是一个爬虫,也就是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。一个简单的larbin的爬虫可以每天获取500万的网页。 利用larbin,我们可以轻易的获取/确定单个网站的所有联结,甚至可以镜像一个网站;也可以用它建立url 列表群,例如针对所有的网页进行 url retrive后,进行xml 阅读全文
posted @ 2011-08-16 08:34 hnrainll 阅读(1289) 评论(0) 推荐(1)
摘要:#include<iostream>#include<string.h>using namespace std; //申明命名空间//error()函数void error(){ cout<<"/nCan not open the file."<<endl; exit(1);//退出}int main(void){ FILE *fp;//定义一个文件指针 char str[80]; cout << "Input:";//从键盘读取输入 cin.getline(str,80); if( (fp=f 阅读全文
posted @ 2011-08-12 21:55 hnrainll 阅读(609) 评论(0) 推荐(0)
摘要:1,时间的获取:通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);#include "stdafx.h"#include "time.h"#include "stdio.h"#include "stdlib.h"int main(void){struct tm t; //定义tm时间结构,用来存储时间格式的数据信息time_t t_of_day; //定义time_t时间结构t.tm_year=2006-1900;//以1900年为标 阅读全文
posted @ 2011-08-11 22:06 hnrainll 阅读(2130) 评论(0) 推荐(0)
摘要:设置成UTF-8,可以解决中文乱码问题。设置字体,默认是10pt,可以修改成12px ,仿宋GB2312。 修改背景色、前景色让眼晴看着舒服些。Load某个配制名称,或输入新名称,然后保存,让之前的设置生效保存1、WindowsXp-》“运行”输入:regedit 打开注册表 2、 HKEY_CURRENT_USER -》Software -》 SimonTatham 3、右击“ SimonTatham ”,在弹出菜单中选择”导出“,保存成”puttyConf.reg”即完成备份。 4、还原Putty设置。直接双击”puttyConf.reg”导入注册表信息即完成还原putty设置转自:htt 阅读全文
posted @ 2011-08-11 19:08 hnrainll 阅读(1553) 评论(0) 推荐(0)
摘要:read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住??? 我的代码是: char chBuff[32]; read(file_pipe[0], chBuff, 16); 如果管道没有数据我这个函数就永远不返回,请问有没有其它的方式,如果管道有数据就读取, 阅读全文
posted @ 2011-08-11 17:51 hnrainll 阅读(20349) 评论(0) 推荐(0)
摘要:在windows下操作linux命令的小工具,非常好。偶然发现,储存资料备用。PuTTY 是一个跨平台的远程登录工具,包含了一组程序,包括:PuTTY (Telnet 和 SSH 客户端)PSCP (SCP 客户端, 命令行下通过 SSH 拷贝文件,类似于 Unix/Linux 下的 scp 命令)PSFTP (SFTP 的命令行客户端,类似于 FTP 的文件传输,只不过使用的是 SSH 的 22 端口,而非 FTP 的 21 端口,类似于 Unix/Linux 下的 sftp 命令)PuTTYtel (仅仅是一个 Telnet 客户端)Plink (命令行工具,执行远程服务器上的命令)Pag 阅读全文
posted @ 2011-08-11 17:31 hnrainll 阅读(49557) 评论(5) 推荐(6)
摘要:continue1、结束本次循环,继续下次循环,并且进行条件判断;2、不可作用于switch语句。当在switch中使用,这个continue实际是作用于其所属的循环结构;若它不属于任何一个循环,程序将因此报错!break1、结束本次循环,并停止下次循环条件判断;2、可以作用于switch语句。开关语句中,执行switch语句之后的代码。1. continuecontinue 可用于 C 提供的全部三种循环结构。continue 会致使循环跳过循环体中余下的语句,转而判断循环条件是否仍然成立,然后选择是否再次进入循环体。如果 continue 位于循环嵌套中的一个内循环,则其仅能影响该内循环的 阅读全文
posted @ 2011-08-10 14:24 hnrainll 阅读(7075) 评论(0) 推荐(0)
摘要:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTA 阅读全文
posted @ 2011-08-10 09:13 hnrainll 阅读(444) 评论(0) 推荐(0)
摘要:/*变参函数原理说明:va_start就是求得第一个可变参的地址.下面几个宏的作用:保是来确定可变参数的列表中每个参数的地址.实现变参函数的要点,就是想办法取得每个参数的地址.*/#include <stdio.h> #include <stdarg.h>#if 0#define va_list void*#define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);#define va_start(arg, start) arg = (va_list)(((char*)&(star 阅读全文
posted @ 2011-08-05 14:38 hnrainll 阅读(355) 评论(0) 推荐(0)
摘要:在学习C语言的过程中我们可能很少会去写变参函数,印象中大学老师好像也没有提及过,但我发现变参函数的实现很巧妙,所以还是特地在此分析下变参函数的实现原理。无需标准C的支持,我们自己写代码来实现。先来看看一个实现代码:#include <stdio.h> #define va_list void*#define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof( 阅读全文
posted @ 2011-08-05 12:26 hnrainll 阅读(499) 评论(0) 推荐(0)
摘要:摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。 关键字:printf, 可变参数 1. 使用情形 int a =10;double b = 20.0;char *str = "Hello world";printf("begin print\n");printf("a=%d, b=%.3f, str=%s\n", a, b, str);... 从pri 阅读全文
posted @ 2011-08-05 12:25 hnrainll 阅读(12312) 评论(1) 推荐(1)
摘要:第一:什么是可变参数int printf(const char* format, ...);看到printf的定义大家就知道了,只有一个固定的const char*参数,后面的都是不定长的参数列表了。第二:自己写一个可变参数函数1.参数形参方式,跟printf类似,第一个为固定参数,后面的用...代替;2.包含stdarg.h头文件,因为需要用到几个里面定义的宏;void va_start(va_list arg_ptr, prev_param);type va_arg(va_list arg_ptr, type);void va_end(va_list arg_ptr);va是variabl 阅读全文
posted @ 2011-08-05 12:24 hnrainll 阅读(908) 评论(0) 推荐(0)
摘要:简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息。(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是说如果你的项目中一个C文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位,它将一个或多. 阅读全文
posted @ 2011-08-04 12:33 hnrainll 阅读(3456) 评论(0) 推荐(2)
摘要:C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式 a=3*5,a*4对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5”是一个赋值表达式”,“a. 阅读全文
posted @ 2011-08-03 21:17 hnrainll 阅读(89848) 评论(10) 推荐(17)
摘要:struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14字节的协议地址*/ }; 上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 struct sockaddr_in { short int sin_family; /* 地址族,AF_xxx 在socket编程中只能是AF_INET */ unsigned short int sin_port; /* 端口号 (使用网络字节顺序) */ struct in_addr sin_ 阅读全文
posted @ 2011-08-03 17:47 hnrainll 阅读(10206) 评论(0) 推荐(0)
摘要:gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两 种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些sockaddr结构随后可由套接口函数直接使用。如此以 来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由getaddrinfo函数填写的套接口地址结构。该函数在 POSIX规范中定义了。#include<netdb.h>int getaddrinfo( const char *hostname, const char *servic 阅读全文
posted @ 2011-08-03 17:44 hnrainll 阅读(3196) 评论(0) 推荐(0)
摘要:循环链表的运算与单链表的运算基本一致,所不同的有以下几点:(1)在建立一个循环链表时,必须使其最后一个节点的指针指向表头节点,而不是像单链表那样置为NULL。此种情况适用于在最后一个节点后插入一个新节点。(2)判断是否到表尾采用判断该节点链域的值是否是表头节点的方法,当链域值等于表头指针时,说明已到表尾,而不是像单链表那样判断链域值是否为NULL。 约瑟夫问题:编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数),开始人选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报道M时停止报数。报M的人出列,将他的密码作为新的M值,从他顺时针方向上的下一个人开始从1 阅读全文
posted @ 2011-08-03 16:39 hnrainll 阅读(823) 评论(1) 推荐(0)
摘要:转自:http://book.51cto.com/art/200811/96138.htm在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项。第3节主要介绍了在Linux下除GDB之外的内存调试及管理工具,包括glibc提供的内存管 阅读全文
posted @ 2011-08-03 09:01 hnrainll 阅读(2007) 评论(0) 推荐(0)
摘要:一、什么是BitTorrent 一般来说,我们认为BitTorrent是一个P2P下载软件(点对点下载软件),你在下载的同时,也在为其他用户提供该文件的上传,因为大家是“互相帮助”,所以不会随着用户数的增加产生服务器拥塞而降低下载速度。 但是严格的来说,BitTorrent是一种用来在网络上传输文件的协议(Protocol),它本质上是分布式系统的P2P(点对点)传输文件协议,用户直接相连,然后互相发送和接收文件的各部分,BitTorrent仍然有一个中心服务器(Tracker)(此处的服务器不是指实体的服务器,只是表示提供服务的服务者)来协调各个用户之间的协作。Tracker服务器只是管理连 阅读全文
posted @ 2011-08-02 15:40 hnrainll 阅读(8720) 评论(0) 推荐(1)
摘要:如果你正在读这篇文章,那么很可能你花费了很多时间在网上。然而,考虑到互联网在我们日常生活中的影响,又有多少人了解互联网是如何起家的呢?下面是互联网的一个简史,包括重要的日期、人物、项目、网站以及其它可以让你至少明白我们现在称作互联网的到底是什么或者是从那里来的。由于互联网完整的历史需要几本书来写,这篇文章只是让你熟悉在1969-2009年期间互联网的里程碑和给互联网带来变革和进步的事件。1969:阿帕网(Arpanet )阿帕网是第一个使用包交换技术(当时来说,这是一项新技术)的真实网络。1969年10月29日,斯坦福大学和加州大学洛杉矶分校的计算机首次连接了起来。实际上,他们是未来互联网的第 阅读全文
posted @ 2011-08-02 14:29 hnrainll 阅读(2430) 评论(0) 推荐(0)
摘要:在2009年我PPT做的比较多,有技术解决方案的,项目管理的,汇报的,个人知识管理和项目管理的等。对于PPT制作最近在重读《金字塔原理》,结合我是如此思考的一些思路来对PPT制作重新思考如下:第一步:通过破题搞清楚PPT内容定位和目标 一个PPT要聚焦,要能够体现你需要传达的核心目标和主题。这是PPT制作的关键,而这个工作最重要的就是要破题,不破不立,破题的重点可以从如下几个方面进行思考。我期望传达的核心思想是什么?你的听众是谁?听众最期望得到什么?PPT讲完后你期望达到一个什么效果? 综合上面的描述就是需要去匹配你的期望和听众的期望,让这两者达到一致,所以在制作PPT的时候你随时都要考虑去解 阅读全文
posted @ 2011-08-01 10:00 hnrainll 阅读(380) 评论(0) 推荐(0)