随笔分类 - 学习笔记
摘要:原先曾以Socket编程为入口开始自己的新的学习,毕竟未曾致用,时至今日已比较生疏。借着阅读《UNIX网络编程(卷一)》(简称UNPv1)的机会,正好复习一番,而且希望将新的感受记录下来。一些技术细节翻阅原书即可,点到为止,不在这篇博文详述。 作者推荐在网络编程中使用snprintf()代替sprintf()、用fget()、strncat()和strncpy()分别代替gets()、strcat()和strcpy();同时提到了更好的替代函数strlcat()和strlcpy()。具体原因是前者的调用会使缓冲区溢出,而这是黑客网络入侵的一种方式。snprintf()需要缓冲区长度作为显...
阅读全文
摘要:select提供的轮询会随着fd数目的增长降低效率,并且其上限是系统定义过的。UNP上select的例子需要编程者自己维护一个fd使用情况的结构,很抽象繁琐。后面的poll的例子和本文提到的epoll使用方法差不多,这是因为高级polling技术没有标准,各个操纵系统的实现不一样,而epoll是由Linux提供的,是对poll的改进。个人感觉区别在于epoll对缓冲池的维护(事件的加入和维护)更简单。 通过对一篇文章(http://blog.csdn.net/ljx0305/article/details/4065058,已转载至“文章”一栏)的学习,笔者试着修改了并调试通过了C语言版的...
阅读全文
摘要:以前在课堂上学习过《Unix初级教程(第四版)》,对于Unix有了一点了解。由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本《Unix环境高级编程》便在此列。希望能通过这本书了解Linux的API,并在这个过程中了解Linux系统的机制。书中内容丰富,有以前了解的,更多的是不了解的。作为第一次阅读,目的不在于事无巨细,过目不忘,而是有个大体了解,从点到面地熟悉这个系统。为了构建整体的印象,对已知的和刚刚了解的都有所涉及。同时作为笔记,不希望成为对目录的简单复制,而是能成为对学习的程度和体会的记录。第一章 基础知识 这一章本身就是概括,略。 旧知: 体系结构、...
阅读全文
摘要:有了之前的基础,此文只是把一些以前没有注意到的和值得学习的知识做一个记录。第一章 作者认为使用#if 0 .... #endif比用/*和*/好,因为后者不能嵌套。但是对于//并没有说明。第二章 三字母词,用两个问号加一个符号表示另一个符号,比较类似于转义字符。查阅了一些资料,它的使用与编译器有关,了解即可,防止字符串常量被错误的解释。??( ==> [ ??< ==> { ??= ==> #??) ==> ] ??> ==> } ??/ ==> \??! ==> | ??' ==> ^ ??- ==> ~ 对于嵌套较深
阅读全文
摘要:说明:本文中代码段主要参考自《QTP自动化测试实践》。一、软件安装 按照提示,勾选"安装Microsoft Script Debugger",完全安装即可。二、软件启动 选择测试对象所需要加载的相应插件,在欢迎窗口选择“Blank Test”。三、自带资源 F1可以获得丰富的帮助文档,菜单Help—>Product Feature Movies中包含了几段示例视频,同时在开始菜单的QTP程序目录中可以看到练习示例程序flight。四、进行测试 QTP使用的是VBScript作为测试脚本语言,因此需要对它有一定的了解,比如数据类型、循环结构等,此处不再赘述。 菜单Aut
阅读全文
摘要:由于项目需要进行猴子测试,最近在看《QTP自动化测试实践》。与书上介绍的WinXP的性能计数器相比,Win7的性能日志使用方法有些不同,而且网上现成的很少,在此整理一下使用方法,以备后用。 启动方法:[Win]+[R]——>“运行”输入perfmon启动性能监视器,当然也可以右击“计算机”——>管理——>性能。 数据收集器集——>用户定义,在右边右击,选择新建——>数据收集器,打开向导窗口。设定监视间隔时间。“添加”时要保证监视的程序正在运行,“计数器”是表示需要监视的内容,比如Working Set是内存占用;“选定的对象实例”是需要监视的对象。下一步就完成了。
阅读全文
摘要:在最近的项目中,自己对部分文件进行了一些小修改,又不便于直接提交版本,需要将新版本和自己修改的老版本进行比较。Beyond Compare功能比较强大好用,应用面比较广,甚至可以作为一些编译器的插件。本文简单记录了一下它的基本使用过程,留档后用。 打开软件,选择文件夹比较。 在两边路径里输入需要比较的文件夹。 选中所有文件,选择“比较内容”。 开始比较。 有不等号并用红色高良的文件表示不同的文件。打开进行查看。 使用Ctrl+N快速定位至每一个不同之处,点击箭头可以选择用右边替换左边(或用左边替换右边)。关闭这个窗口可以进行保存,误操作可以使用Ctrl+Z撤消。 另外,如果两...
阅读全文
摘要:11月18日第四章 连接 连接器并不理解C语言,然而它能理解机器语言和内存布局。作者强调连接器并不能处理连接时和C语言相关的一些错误,如果C语言提供了lint,要善加利用。 每个外部对象都必须在程序某个地方进行定义。这就意味着如果一个程序中包括了语句extern int a;就应该在别的某个地方包括语句int a;。同时为了免两次定义同一个外部对象(无论有无初值)可能引起的错误,唯一的解决办法是每个外部变量只定义一次。 static可以把变量和函数的作用域限制在一个源文件中,避免命名冲突。 函数必须在调用它之前进行定义或声明,否则它的返回类型就默认为整型,这样当它与函数连接时就会得到...
阅读全文
摘要:自从上大学起,接触C也很久了,但是一直不怎么深入,也疏于练习。课程学习之余,专门的C只看过《C程序设计语言》、《C primer plus》,现在终于有了点时间看看更多的书了。本文主要记录阅读和学习《C陷阱与缺陷》的一些心得体会。11月15日前言和导读 “得心应手的工具在初学时的困难程度往往超过那些容易上手的工具。”比较认同这句话。我至今觉得自己其实还是个刚入了门的初学者。第一章 “词法”陷阱 由于之前学过编译原理,对编译器词法分析(主要是符号识别过程)比较了解,理解起来不困难。 在讲到"="和"=="、"|"和"||&qu
阅读全文
摘要:一、三层(网络层)发现算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008数据结构:待检路由设备网关链表:存放指定深度内待检路由设备的网关信息,处理后删除。拓扑信息链表:存放从已检测路由设备的网关信息。子网信息链表:存放网关信息对应的子网信息。基本思想: 类似于广度优先,在指定深度内运行算法,最后根据拓扑信息链表获得所有路由及其互联关系,根据子网信息链表各路由设备连接的子网及子网内所有活动主机的信息。需要获得的信息: 路由信息如下图所示。点击可查看补充说明。路由表中的每个条目都包含ipRouteDest、ipRouteIfIndex、ipRouteNex..
阅读全文
摘要:(本文绝大部分内容来自于Gary.Wrighth和W.Richard Stevens的《TCP/IP详解,卷1:协议》,从中节选这些内容主要是为了方便查阅)一、协议 基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管的网络单元(也叫被管设备) 。被管设备种类繁多,例如:路由器、X终端、终端服务器和打印机等。这些被管设备的共同点就是都运行TCP/IP协议。被管设备端和管理相关的软件叫做代理程序(agent)或代理进程。管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple NetworkManagement Protocol) 。在R.
阅读全文
摘要:放假归来,半个月没看书了,稍微有些生疏。被安排了新的工作,老的自学任务还需继续完成。 这一章内容比较多,按小节整理了一下。一、编码整数1.整数型的大小 由通信过程双方交换信息的协议标准引申出了编码的整数,进而探讨了各个整数类型的大小(char、int、long、int8_t、uint8_t等)、获取它们的长度的方法——sizeof()、并且有一个简单的程序示例TestSizes.c来展示。2.传输顺序 多个字节编码的整数,是从最高有效位(大端、左端)还是从最低有效位(小端、右端)发送,也是传输双方需要协调的。大多数协议使用大端顺序,因此它也被称为网络字节顺序。3.符号扩展 利用...
阅读全文
摘要:UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以把许多不同来源的信件或包裹放入其中。因此,在示例UDPEchoClient.c中,是需要用SockAddrsEqual()来检测回送的数据包是否是之前所送往的服务器回送的,尽管在示例中不太可能出现这种情况。 程序使用的地址结构、套接字的创建还是与TCP相差无几。由于没有建立连接的步骤,不需要调用listen(),一旦套接字具有地址就准备好接受消息。同时UDP也不需要使用accept()为每个客户获取一个新的套接字,而是...
阅读全文
摘要:这一章的核心内容是getaddrinfo()函数。 int getaddrinfo(constchar*hostStr, constchar* serviceStr, conststruct addrinfo *hints,struct addrinfo **results)//需要配合下面函数进行使用void freeaddrinfo(struct addrinfo *addrList) //释放创建的结果链表const char *gai_strerror(int errorCode) //如果getaddrinfo返回非0值,可以描述出错的是什么 含义: hostStr 主...
阅读全文
摘要:前段时间刚开始学习《TCP/IP Sockets编程(C语言实现) (第2版)》一书,又被告知建议先去看一下《UNIX网络编程(第一卷)》的部分内容会对理解其理论知识有所帮助,于是稍微停滞了一下。几天前所练习的实例已经有所生疏,因此为了复习这部分内容(前面所提起的第一本书第2章),此文便作为复习笔记(书本关键内容摘录),而以后各章节的学习也希望能做到及时总结和复习。 本章示例的工作方式:客户连接服务器并发送它的数据;服务器简单地把它接收到的任何内容发送回客户并断开连接。1.典型的TCP客户的通信步骤⑴使用socket()创建TCP套接字 参数涉及地址族、使用的协议,正确创建返回一个句柄...
阅读全文
摘要:关于IPv6地址的结构(P23)struct in_addr { uint32_t s_addr[16];}; IPv6地址是128位的,因此对此生疑。经过对netinet/in.h查证,发现确实有误。以下是在in.h中的定义:struct in6_addr { union { uint8_t __u6_addr8[16];#if defined __USE_MISC || defined __USE_GNU uint16_t __u6_addr16[8]; uint32_t __u6_addr32[4];#endif } __in6_u...
阅读全文
摘要:作者所属大学Baylor的网站,在相关的页面上提供了下载。http://cs.ecs.baylor.edu/~donahoo/practical/CSockets2/textcode.html后来发现这篇日志访问挺高的,干脆自己打个包放上来了。http://files.cnblogs.com/wuyuegb2312/Sockets%E7%BC%96%E7%A8%8B%E6%BA%90%E7%A0%81.rar
阅读全文
摘要:由于学习安排的改变,对Unix的进一步的学习需要稍微推后一些了。这里把《Unix初级教程(第四版)》中其他指令记录和操作一下,以备以后的查阅。1.shell重定向 命令 > 文件名 保存输出到指定文件(新建或完全覆盖) 命令 >> 文件名 保存输出到指定文件(追加至结尾) 命令 < 文件名 从文件得到输入 命令 << 文件名 同上,一般在脚本使用2.简单指令date、cal:时间类passwd:密码修改pwd、ls、cd:目录查看和操作echolp、pr:打印cat,mkdir,rmdir,rm,cp,ln,mv(移动或改名):文件操作,后三个格式为comm
阅读全文
摘要:同上一篇一样,资料来自于《Unix初级教程(第四版)》。1.启动-R 只读方式打开,但打开后如果有权限,可以强制执行保存。-c (command)加载后执行命令,比如"vim -c /most myfirst" 打开该文件后直接向后搜索most。更多的可以参考 -h2.同时编辑多个文件vim [file1] [file2] ...此时:ar 查看当前编辑的文件名:n 切换当前编辑的文件另外还有:e 切换到新文件:w 读取已存在的文件并将其内容放入正在编辑的文件中:w [起始行][终结行] [文件名] 将当前文件部分放于新文件中,若已存在则覆盖。3.文本重排命令模式下dd 删
阅读全文
摘要:最近在用Ubuntu11.04重新学习以前没怎么学好的Unix,不过在VMware7.1.4下Ubuntu11.04的X Window表现不是很好。这都无所谓,先把命令行的基础打好再说。 Ubuntu的Vi也不好用,搞了个Vim用来学习了,简单记录下它的基本操作,备用,来源于《Unix初级教程...
阅读全文