shell脚本编程之选择控制结构[转]

Posted by & filed under Uncategorized.

  转自:http://litaotao.blog.51cto.com/6224470/1253744 shell脚本编程之选择控制结构 程序开发语言,分为两种,一种是解释型语言,一种是编译型语言。解释型语言是解释语句,并且能根据流程控制机制让语句按需执行,解释一条语句就返回语句的结果,这种语言需要一个解释器,而linux中的bash就是这样的一个解释器,常见的解释型语言有perl,python,ruby,bash。编译型语言,首先需要编译源程序,并且能够将源程序转换为二进制格式,而后让其执行,这种语言需要一个编辑器,如linux下的gcc就是一个编辑器,编译型语言有C,C++,C#等。无论是解释型语言还是编译型语言,都有语言控制结构,没有控制结构的程序,不能算做一个好的程序。 语言控制结构分为三种: 顺序执行:默认法则,逐条执行各语句 选择执行:条件判断,只有部分是符合条件的,只执行符合条件的部分 循环执行:将同一段代码反复的执行n次 这篇博客写关于选择控制结构。 linux的选择控制结构有两种一种是 Read more […]

Linux操作系统文件系统基础知识详解【转】

Posted by & filed under Uncategorized.

一 、Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。 目录提供了管理文件的一个方便而有效的途径。 Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。 /根目录 ┃ ┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓ ┃   ┃      ┃     ┃     ┃     ┃      ┃     ┃     ┃ bin  home    dev     etc     lib     sbin    tmp      usr    var ┃                               ┃ ┏━┻━┓  Read more […]

c内存管理详解[转]

Posted by & filed under Uncategorized.

  伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) Read more […]

【转】 [DLL – Beginers] 使用LoadLibrary调用DLL中输出的class

Posted by & filed under Uncategorized.

  转自:http://blog.csdn.net/jdcb2001/article/details/1394883 原文地址:http://www.codeproject.com/dll/classesexportedusingLL.asp Demo下载- 21.4 Kb 源码下载 – 5.88 Kb 引言 我见过相当多的用来说明在程序中如何使用从DLL中输出的class的代码,但这些方法都是通过隐式链接完成的。回忆一下DLL的概念,有两种方法可以使用DLL中输出的函数:一是在程序代码中简单地引用DLL中符号,这使得加载器在程序启动时隐式地加载(链接)所需的DLL,这就是众所周知的“隐式链接”。 第二种方法就是在程序运行过程中显式地加载所需的DLL(使用LoadLibrary())并且显式地链接到需要的输出符号。换句话说,如果程序要调用DLL中的一个函数,可以显式地加载一个DLL到她的进程地址空间,然后获得函数在DLL中的虚拟内存地址,并利用这个地址来调用函数。这种方法的优美之处就在于所有的工作都是在程序运行过程中完成的,并且程序可以从进程地址空间中卸载不再需要的DLL。这种方法就是“显式链接”。 背景 前面我已经介绍了函数的调用方法,但是怎么使用输出类呢?对于隐式链接的DLL,调用类和调用函数没有什么区别;而在一般情况下,想要显示加载DLL并使用其中的类是不可能的。但是我写这篇文章并不是为了告诉你为什么这不可能,而是要告诉你如何来实现它。对了!就是使用LoadLibrary()。 在继续下文之前我想告诉你,以下的代码很粗糙,如果你准备将其用于你的项目中,请先征得你老板的同意。但是这些代码不仅用于让你加深理解,在实在没有办法的情况下也不失为一种极端的解决方法。 代码 在示例代码中,我创建了一个名为Calc.DLL计算器DLL,并在一个名为UserOfcalc的命令行程序中使用其提供的计算功能。

  DLL的实现部分在文件Calc.cpp中:

  现在,通过以下步骤可以显式地加载DLL并使用Calc类中提供的函数: 第一步是使用LoadLibrary将Calc.DLL加载到你的程序中。

  因为你有Calc.DLL的头文件,所以下一步就是分配一个与类大小匹配的内存块,然后调用构造函数代码。

  但是在C++中我们为什么要使用malloc而不用new呢?这是因为new操作符会调用CCalc’s的默认构造函数,而我们根本访问不到它。记住,我们必须要动态地加载DLL,因此在build时没有定义CCalc类的构造函数。 因此,我们仅仅获得了一块与CCalc类大小相等的未初始化的内存。 如果你使用Dumpbin.exe(位于Microsoft Read more […]

visual studio C++项目中lib 和 dll 的区别、生成以及使用详解

Posted by & filed under Uncategorized.

  转自 http://www.cnblogs.com/TenosDoIt/p/3203137.html 首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件 动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 Read more […]

【转】每个程序员都应该知道的8个Linux命令

Posted by & filed under Uncategorized.

  转自:http://www.csdn.net/article/2012-09-13/2809917-Linux-Commands-Every%20Developer-Should-Kn Linux里有很丰富的各种命令,有些是很难用的。然而,学会了前面说的这8个命令,你已经能处理大量的log分析任务了,完全不需要用脚本语言写程序来处理它们。 每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对Linux命令行任务时,你应该能很熟练的完成。事实上,学会了下面8个命令,我基本上能完成任何需要完成的任务。 注意:下面的每个命令都有十分丰富的文档说明。这篇文章并不是来详尽的展示每个命令的各种功用的。我在这里要讲的是这几个最常用的命令的最常见用法。如果你对linux命令并不是很了解,你想找一些这方面的资料学习,那这篇文章将会给你一个基本的指导。 让我们从处理一些数据开始。假设我们有两个文件,分别记录的订单清单和订单处理结果。 order.out.log   8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99   8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99   8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99   order.in.log   8:22:20 111, Order Complete   8:23:50 112, Order sent to fulfillment   8:24:20 113, Refund sent to processing cat cat – Read more […]

【转】20个Linux防火墙应用技巧

Posted by & filed under Uncategorized.

  转自:http://www.csdn.net/article/2012-01-17/310905 Netfilter是Linux内置的主机防火墙,它可以使用iptables命令处理IPv4协议,也可以使用ip6tables命令处理IPv6协议。在iptables之前,Linux 2.2中使用ipchains来配置防火墙,Linux 2.0中则使用ipfwadm,它基于BSD的ipfw命令。 以下实例在RHEL 6.x上执行通过,也适用于其他Linux发行版。 1.显示防火墙的状态 以root权限运行下面的命… 导言:随着互联网的飞速发展,毫无疑问,互联网上的安全,操作系统平台的安全也逐渐成为人们所关心的问题。而许多网络服务器、工作站所采用的平台为Linux/UNIX平台。Linux平台作为一个安全性、稳定性比较高的操作系统也被应用到了更多领域。本文带领大家探讨了Linux系统管理员应该掌握的20个防火墙应用技巧。 广为人知的iptables命令行 Netfilter作为Linux内置的主机防火墙,它可以使用iptables命令处理IPv4协议,也可以使用ip6tables命令处理IPv6协议。在iptables之前,Linux Read more […]

【转】C语言内存对齐详解(1)

Posted by & filed under Uncategorized.

  转自:http://blog.csdn.net/wanglang1000/article/details/17710129 一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那 Read more […]

【转】有关printf的小问题

Posted by & filed under Uncategorized.

  转自 http://blog.csdn.net/lzl124631x 打印结构体 曾对C++的迭代器不甚了解,于是尝试用printf直接打印迭代器,得到了诡异的输出结果。 测试系统:Win7+VS2010

  当时就震惊了,一时无法理解为何有这样的输出结果。再进行尝试,发现C中也有类似的问题。

  第一个printf给人一种错觉就好像s变换了它的打印值!不过自己好好想想,发现不难理解:printf中指示打印对象的指针每次只移动int的长度,因此打印三次%d只是打印了第一个s的三个成员。至于第二个printf,只是先输出了s的所有成员,然后输出了内存中排在s后面的一些无意义的数据罢了。 这里我有一个地方不明白,为何每次都是0, Read more […]

(转)UDP可靠传输那些事

Posted by & filed under Uncategorized.

  原文地址:http://blog.csdn.net/danscort2000/article/details/8432778 可靠udp传输从来都不是高效率可靠传输的代名词,影响传输效率的最重要因素在于,sendto函数,每次只能投递一个mtu长度的包,频繁的系统调用极大的影响了极限性能,也许你会说,udp默认可以达到64KB,你可以投递大包,是的,可以投递,但是由于网路上mtu设备的限制,大包会被拆成小包,如果你定义一个包大于mtu,那么当其中任何一个小包发生丢包的时候,会导致整个包需要重传,这个开销非常巨大,特别是在Internet上,而采用mtu大小限制内的包进行传输,丢失一个,只需要重传一个,开销小的多。udp可靠传输的自定义校验是另外一个限制,为了避免伪造的udp包,我们需要在我们自己的可靠udp包中加入自定义的校验,这个校验方法也直接影响到性能,最快的是直接套用crc32校验,由于目前cpu指令集对这个计算进行了优化,因此它的计算速度几乎是最快的,但是代价是,人家要破解或者伪造你的udp包也很容易,因为算法是透明的,以前暴出tcp伪造漏洞也是这样,由于它的包组成是透明公开,唯一有保密性的是序列号,结果有些系统初始序列号存在规律,结果就导致了安全问题。最后,发送和接收,由于是在应用层进行[无论你是采用api Read more […]