- 博客(654)
- 资源 (4)
- 收藏
- 关注
转载 UNIX环境高级编程——Linux终端设备详解
终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:1.串行端口终端(/dev/ttySn)串行端口终端(Serial Port Terminal)是使用计算
2013-08-03 16:25:07 1727
转载 UNIX网络编程——网络IPC:套接字
Contents套接字接口套接字描述符寻址字节序地址格式地址查询绑定地址建立连接数据传输套接字选项带外数据UNIX域套接字使用套接字的示例面向连接的ruptime无连接的ruptime套接字接口套接字接口是一组用来结合UNIX I/O函数进行进程间通信的函数,大多数系统上都实现了它,包括各种UNIX变种、Windows和Mac系统。套接字接口套接字描述符套接字是通信端点的抽象,使用套接字描述符访问
2013-08-03 15:28:54 2448
转载 UNIX网络编程——Socket通信原理和实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基
2013-08-03 14:38:19 3336
原创 UNIX环境高级编程——单实例的守护进程
#include #include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesize; int error, in, out; /* 忽略终端I/O信号,S
2013-08-03 03:08:23 1708
原创 UNIX环境高级编程——初始化一个守护进程
#include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesize; int error, in, out; /* 忽略终端I/O信号,STOP信号 */
2013-08-03 03:05:54 1572
原创 UNIX环境高级编程——创建孤儿进程
/* 创建孤儿进程 父进程终止后,向子进程发送挂断信号,又接着发送继续信号。 */ #include #include #include #include #include #include #include /* 处理接受到的挂断信号 */ static void sig_hup(int signo) {
2013-08-03 02:44:52 1521
原创 UNIX环境高级编程——实现uid to name
setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据。strcut passwd * getpwent(void); getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。
2013-08-03 02:27:42 1755
原创 UNIX环境高级编程——标准IO-实现查看所有用户
#include #include #include #include int main(int argc, char *argv[]){ char szBuf[512]; char szName[512]; FILE *f = fopen("/etc/passwd","r"); memset(szBuf, 0, sizeof(szBuf)); int i; while(fg
2013-08-03 02:03:09 1436
原创 UNIX环境高级编程——环境变量表读取/添加/修改/删除
#include #include #include int main(){ char* pValue; pValue = getenv("HOME"); // 起始目录(主目录) printf("$HOME = %s\n", pValue); // 在主目录下建立a.txt文件 char szFilePath[100]; strcpy(szFilePath, pValue)
2013-08-03 01:56:21 1767
转载 UNIX网络编程——进程间通信概述
一、顺序程序与并发程序特征顺序程序特征顺序性封闭性:(运行环境的封闭性)确定性可再现性并发程序特征共享性并发性随机性二、进程互斥1、由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥2、系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。3、在进程中涉及到互斥资源的程序段叫临界区举例如下图:假设x = 1; 当A进程已经判
2013-08-03 00:20:37 1641
转载 UNIX网络编程——通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符。 下面先来看两个函数:#include #include ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);ssize_t recvmsg(int sockfd, struct msghdr
2013-08-03 00:09:35 2105
转载 UNIX网络编程——UNIX域套接字编程和socketpair 函数
一、UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校
2013-08-02 19:04:26 2403
转载 UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
一、epoll 系列函数简介#include int epoll_create(int size);int epoll_create1(int flags);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wait(int epfd, struct epoll_event *event
2013-08-02 18:39:00 1930
转载 UNIX网络编程——select函数的并发限制和 poll 函数应用举例
一、用select实现的并发服务器,能达到的并发数,受两方面限制 1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看 2、select中的fd_set集合容量的限制(FD_S
2013-08-02 17:54:12 1820
转载 UNIX网络编程——epoll 的accept , read, write(重要)
在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK)。 从字面上看,意思是: EAGAIN: 再试一次 EWOULDBLOCK:如果这是一个阻塞socket, 操作将被block perror输出:Resource temporarily unavailable总结: 这个错误表示
2013-08-02 15:24:24 3820 2
转载 UNIX网络编程——epoll的 et,lt关注点
epoll模型有两种工作模式,ET和LT两种模式下都有一些细节值得注意,以下是一些思考: 一、ET模式下Q1:调用accept时,到底TCP完成队列里有多少个已经建立好的连接?这里又得分情况来说:没有连接。这种情况发生在TCP连接被客户端夭折,即在服务端调用accept之前客户端给出一个RST。该RST导致刚刚建立好的连接从服务器端的TCP完成队列中被移出。源自berkeley的实现会在内核处理该
2013-08-02 14:28:29 2948 1
转载 UNIX网络编程——解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user datagram protocol,用户数据报协议)是无连接的,提供高效率服务。在实际工程应用中,对可靠性和效率的
2013-08-01 19:06:25 1928 1
转载 UNIX网络编程——Socket粘包问题
一、两个简单概念长连接与短连接:1、长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2、短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个Client连接一个Server。 二 、什么时候需要考虑粘包问题? 如果利用tcp每次发送
2013-08-01 18:28:20 2440
转载 UNIX网络编程——Socket/TCP粘包、多包和少包, 断包
为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整。为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的
2013-08-01 17:53:32 1951
转载 UNIX网络编程——利用ARP和ICMP协议解释ping命令
一、MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit) 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。 当网络上
2013-08-01 15:38:02 2425
转载 UNIX网络编程——利用recv和readn函数实现readline函数
在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是文件内容,上传完所有文件内容后关闭连接,服务器可以先调用readn读12个字节,根据文件名创建文件,然后在一个循环中
2013-08-01 15:20:43 1571
转载 UNIX网络编程——tcp流协议产生的粘包问题和解决方案
我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是一个数据包有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。而UDP是面向
2013-08-01 14:37:39 1970
转载 嵌入式LINUX环境下视频采集知识
V4L2是Linux环境下开发视频采集设备驱动程序的一套规范(API),它为驱动程序的编写提供统一的接口,并将所有的视频采集设备的驱动程序都纳入其的管理之中。V4L2不仅给驱动程序编写者带来极大的方便,同时也方便了应用程序的编写和移植,具有广泛的应用价值。 Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采
2013-07-31 17:39:53 2052
转载 Web安全测试之XSS
XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 比如获取用户的Cookie,导航到恶意网站,携带木马等。作为测试人员,需要了解XSS的原理,攻击场景,如何修复。 才能有效的防止XSS的发生。XSS 是如何发生
2013-07-31 16:39:17 1522
转载 Fiddler (五) Mac下使用Fiddler
Fiddler是用C#开发的。 所以Fiddler不能在Mac系统中运行。 没办法直接用Fiddler来截获MAC系统中的HTTP/HTTPS, Mac 用户怎么办呢?Fiddler可以允许“远程连接”。 我们可以利用这个间接来实现Fiddler捕获Mac系统发出的HTTP/HTTPS。使用虚拟机Mac中安装虚拟机软件(比如VMware Fusion). 然后在虚拟机中安装一个 Win
2013-07-31 01:00:35 2018
转载 Fiddler (四) 实现手机的抓包
Fiddler是我最喜爱的工具,几乎每天都用, 我已经用了8年了。 至今我也只学会其中大概50%的功能。 Fiddler绝对称得上是"神器", 任何一个搞IT的人都得着的。小弟我立志, 一定要把Fiddler的所有的功能和用法都写出来。 写成一个完整系列的教程。Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求。Fiddler能捕获IOS设
2013-07-31 00:59:05 2153
转载 Fiddler (三) Composer创建和发送HTTP Request
Fiddler的功能还有很多, 很多功能都没有被挖掘出来。这次我们介绍Fiddler中的一个非常有用的功能Composer,是用来创建和发送HTTP Request的。Composer的使用方法很简单,看下就知道用了。Fiddler Composer介绍Composer的官方帮助文档:http://www.fiddler2.com/fiddler/help/composer.aspFiddler的
2013-07-31 00:56:55 2250
转载 Fiddler (二) Script 用法
现在我们来看看Fiddler的高级用法. Fiddler Script。 Fiddler中的script 可以让我们自动修改Http request和Response 的内容。 而不用手动地去下"断点"来修改http Request或Response中的值。 Fiddler的作者Fiddler 的作者是 Eric Lawrence 是个大师级的人物, 目前在微软总部西雅图工作。 他的博客是:
2013-07-31 00:54:52 1960
转载 HTTP协议 (七) Cookie
Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的【细说Cookie】, 让我学到了很多东西。Fish的这篇文章写得太经典了。 所以我这篇文章就没有太多内容了。 最近我打算写一个系列的HTTP文章,我站在HTTP协议的角度, 说说我对Cookie的理解。 Cookie是什么,有什么用,为什么要用到Cookie请看Fish Li 写的【细说Cookie】 Cookie的分类
2013-07-31 00:32:36 1465
转载 HTTP协议 (六) 状态码详解
HTTP状态码,我都是现查现用。 我以前记得几个常用的状态码,比如200,302,304,404, 503。 一般来说我也只需要了解这些常用的状态码就可以了。 如果是做AJAX,REST,网络爬虫,机器人等程序。还是需要了解其他状态码。 本文我花了一个多月的时间把所有的状态码都总结了下,内容太多,看的时候麻烦耐心点了。HTTP状态码的学习资料到处都有,但是都是理论上讲解。 本文介绍HTTP协
2013-07-31 00:22:29 1486
转载 HTTP协议 (五) 代理
这次介绍代理服务器, 代理服务器是HTTP协议中一个重要的组件, 发挥着重要的作用。 本文介绍一些HTTP代理服务器的概念和工作原理。什么是代理服务器Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器即是Web服务器又是Web客户端。 Fiddler就是个典型的代理Fiddler 是以代理web服务器的形式工作的,
2013-07-31 00:18:45 1874
转载 HTTP协议 (四) 缓存
这次继续介绍HTTP协议中的缓存机制。HTTP协议提供了非常强大的缓存机制, 了解这些缓存机制,对提高网站的性能非常有帮助。 本文介绍浏览器和Web服务器之间如何处理"浏览器缓存",以及控制缓存的http header.本文会使用Fiddler来查看HTTP request和Response。 缓存的概念缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有A
2013-07-31 00:15:54 1589
转载 HTTP协议 (三) 压缩
这次继续介绍HTTP协议中的压缩。本文会使用Fiddler来查看HTTP request和Response。HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理
2013-07-31 00:13:46 1562
转载 HTTP协议 (二) 基本认证
http协议是无状态的, 浏览器和web服务器之间可以通过cookie来身份识别。 桌面应用程序(比如新浪桌面客户端, skydrive客户端)跟Web服务器之间是如何身份识别呢?什么是HTTP基本认证桌面应用程序也通过HTTP协议跟Web服务器交互, 桌面应用程序一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64编码的字符串放在http request 中的header A
2013-07-31 00:11:02 1825
转载 HTTP协议详解
当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便地捕获HTTP Request和HT
2013-07-31 00:02:30 1527
转载 Wireshark基本介绍和学习TCP三次握手
这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括http,TCP,UDP,等网络协议包。记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实。有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段。更能加深我们对网络协议的理解。
2013-07-30 23:52:43 1429
转载 Fiddler 教程
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助。Fiddler的基本介绍Fiddler的官方网站: www.fiddler2.comFiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料。Fiddler是
2013-07-30 23:48:14 1839
转载 UNIX网络编程——线程池模式比较(ICE线程池模型和L/F领导者跟随者模式)
程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA半同步/半异步模式。 HS/HA 半同步/ 半异步模式 :分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并解析然后再往队列丢数据,然后消费者读出数据进行应用逻辑处理; 优点:简化编程将低层的异步I/O和高层同步应用服务分离,且没有降低低层服务性能。集中层间通信。 缺点:需要线程间传输数据,因此而带来的动态内存
2013-07-29 22:36:42 2188
原创 UNIX网络编程——常用服务器模型总结
下面有9种服务器模型分别是:迭代服务器。并发服务器,为每个客户fork一个进程。预先派生子进程,每个子进程都调用accept,accept无上锁保护。预先派生子进程,以文件锁的方式保护accept。 预先派生子进程,以线程互斥锁上锁的方式保护accept。预先派生子进程,由父进程向子进程传递套接口描述字。 并发服务器,为每个客户请求创建一个线程。预先创建线程,以互斥锁上锁方式保护accept。 预
2013-07-29 18:52:02 1889
原创 UNIX网络编程——客户/服务器程序设计示范(总结)
(1)当系统负载较轻是,每来一个客户请求现场派生一个子进程为之服务的传统并发服务器程序模型就足够了。这个模型甚至可以与inetd结合使用,也就是inetd处理每个连接的接收。我们的其他意见是就重负荷运行的服务器而言的,譬如Web服务器。 (2)相比传统的每个客户fork一次设计示范,预先创建一个子进程池或一个线程池的设计示范能够把进程控制CPU时间降低10倍或以上。编写这些示范的程序并不复杂,不过
2013-07-29 18:12:37 1535
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人