03 2014 档案

摘要:当从Norflash启动时,Steppingstone被映射到地址 0x4000 0000 至 0x4000 0FFF; 当从Nandflash启动时,Steppingstone被映射到地址 0x0000 0000 至 0x0000 0FFF,此时挂接在BANK0的Norflash对CPU来说是不可见的。 阅读全文
posted @ 2014-03-31 16:16 ITtecman 阅读(424) 评论(0) 推荐(0) 编辑
摘要:错误提示如下: 解决方法: 重新编译即可。 阅读全文
posted @ 2014-03-31 14:45 ITtecman 阅读(508) 评论(0) 推荐(0) 编辑
摘要:近日,在学习《ARM处理器裸机开发实战——机制而非策略》一书,在TQ2440开发板上,按照书中实例以及光盘配套程序源代码进行Timer0中断试验,编译成功后烧写到开发板上,没有任何反应,反复检查代码,一直没有找出哪里有问题,就是到开发板上没有预期效果。(让人纠结的很) 最终参考了TQ2440之定时器中断0的程序代码,编译成功后,烧写到板子上,惊喜出现了。绝对是久旱逢甘霖的感觉,在这里对TQ244... 阅读全文
posted @ 2014-03-31 13:05 ITtecman 阅读(633) 评论(0) 推荐(0) 编辑
摘要:分离链接法(separate chaining):将散列到同一个值的所有元素保留到一个表中(用指针实现的单链表)。 /* 实现分离链接法所需要的类型声明 */#ifndef _HashSep_H#define _HahsSep_Hstruct ListNode;typedef struct ListNode *Position;struct HashTbl;typedef struct H... 阅读全文
posted @ 2014-03-31 09:33 ITtecman 阅读(526) 评论(0) 推荐(0) 编辑
摘要:/* hash function */typedef unsigned int Index; IndexHash( const char *Key, int TableSize ) //Key为要散列的关键字, TableSize为散列表的大小{ unsigned int HashVal = 0; while( *Key != '\0' ) HashV... 阅读全文
posted @ 2014-03-31 08:12 ITtecman 阅读(350) 评论(0) 推荐(0) 编辑
摘要:参考自:http://flynoi.blog.hexun.com/31272178_d.html 霍纳法则简介 假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anxn+an-1xn-1+…+a1x+a0求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。有没有更高... 阅读全文
posted @ 2014-03-30 09:51 ITtecman 阅读(6256) 评论(0) 推荐(0) 编辑
摘要:/* AVL树的节点声明 */#ifndef _AVLTREE_H#define _AVLTREE_Hstruct AvlNode;typedef struct AvlNode *Position;typedef struct AvlNode *AvlTree;AvlTree MakeEmpty(AvlTree T);Position Find(ElementType X, AvlTree ... 阅读全文
posted @ 2014-03-28 08:28 ITtecman 阅读(506) 评论(0) 推荐(0) 编辑
摘要:Linux/Unix内核源代码用的编译器是GCC,而GCC采用的是AT&T的汇编格式,这与ADS下使用的汇编格式是不同的。 两种汇编格式的部分对比如下: GNU ARM汇编 ADS ARM汇编 “@”或“/*…*/” “;” .include GET ... 阅读全文
posted @ 2014-03-27 10:21 ITtecman 阅读(752) 评论(0) 推荐(0) 编辑
摘要:AVL(Adelson-Velskii和Landis)树是带有平衡条件的二叉查找树。 一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。(空子树的高度定义为-1) AVL树的每一个节点(在其节点结构中)保留高度信息。 在高度为h的AVL树中,最少节点数S(h)由S(h)=S(h-1)+S(h-2)+1给出。对于h=0,S(h)=1;h=1,S(h)=2。可以看出函数S(h)... 阅读全文
posted @ 2014-03-27 08:32 ITtecman 阅读(627) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/lw370481/article/details/7311668 函数与宏 #define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行... 阅读全文
posted @ 2014-03-26 21:05 ITtecman 阅读(1502) 评论(0) 推荐(0) 编辑
摘要:伪操作,其操作对象是汇编编译器;而伪指令,其最终的操作对象是指令,也就是说,其对应的是用于CPU执行的指令。这就是他们之间简单但很微妙的区别。 伪指令最终面对的是CPU指令集的指令。伪操作是用来控制汇编器是如何来产生汇编指令的。 阅读全文
posted @ 2014-03-26 14:09 ITtecman 阅读(2585) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.sina.com.cn/s/blog_9bad4f090101e14d.html 一、立即数指令码的组成 ARM公司将32bit指令码分为如下两部分: 32bit立即数通过Imm8值循环右移ROR值*2bit得到。即:shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)。 二、如何判断一个数是... 阅读全文
posted @ 2014-03-26 11:01 ITtecman 阅读(1961) 评论(0) 推荐(0) 编辑
摘要:独立处理器 独立处理器是指那些专注于指令功能的处理器。独立处理器一般会提供最强的整体CPU性能,但它们需要配备外部芯片组才能构成一个完整的系统。 独立处理器都需要连接支撑逻辑芯片才能访问外设,这些外设包括系统主内存(DRAM)、ROM或闪存、系统总线(比如PCI)和其他外设,比如键盘控制器、串行端口和IDE接口,诸如此类。支撑逻辑芯片的功能一般由配套的芯片组来完成,而这个芯片组很可能是专门为某... 阅读全文
posted @ 2014-03-24 19:54 ITtecman 阅读(1278) 评论(0) 推荐(0) 编辑
摘要:桌面电脑刚加电时,一个叫做BIOS的软件程序立刻获得了处理器的控制权。(历史上,BIOS是Basic Input/Output Software的缩写,但现在这个单词已经有了自身的含义,因为其完成的功能比以前复杂多了。)BIOS可能实际存储在一块闪存中,便于升级BIOS程序。 BIOS是一个复杂的系统配置软件,它拥有硬件架构的底层信息。当电脑加电时,BIOS首先获得处理器的控制权。它的主要任务是... 阅读全文
posted @ 2014-03-24 13:32 ITtecman 阅读(5900) 评论(0) 推荐(0) 编辑
摘要:/* search_tree.h */#ifndef _SEARCH_TREE_H#define _SEARCH_TREE_Hstruct tree_node;typedef struct tree_node *position;typedef struct tree_node *search_tree;search_tree make_empty(search_tree t);positi... 阅读全文
posted @ 2014-03-24 09:40 ITtecman 阅读(407) 评论(0) 推荐(0) 编辑
摘要:二叉查找树:对于树中的每个节点X,它的左子数种所有关键字值小于X的关键字,而它的右子树种所有关键字值大于X的关键字值。 /* 二叉查找树声明 */#ifndef _TREE_Hstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;SearchTree MakeEmpty( ... 阅读全文
posted @ 2014-03-23 22:41 ITtecman 阅读(619) 评论(0) 推荐(0) 编辑
摘要:/* queue.h */#ifndef _QUEUE_H#define _QUEUE_Hstruct queue_record;typedef struct queue_record *queue;int is_empty( queue q );int is_full( queue q );queue create_queue( int max_elements );void dispos... 阅读全文
posted @ 2014-03-23 19:35 ITtecman 阅读(1003) 评论(1) 推荐(0) 编辑
摘要:RGB颜色原理是用三种原色——红、绿、蓝的色光以不同的比例相加,以产生多种多样的色光。 RGB的命名来源于三种相加原色的首字母——Red(红)、Green(绿)、Blue(蓝)。 三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,分别对黄绿色、绿色和蓝紫色(或称紫罗兰色)的光最敏感(波长分别为564、534和420纳米),如果辨别黄绿色的细胞受到的刺... 阅读全文
posted @ 2014-03-23 14:03 ITtecman 阅读(1374) 评论(0) 推荐(0) 编辑
摘要:队列的数组实现 /* 队列的类型声明 */ #ifndef _Queue_hstruct QueueRecord;typedef struct QueueRecord *Queue;int IsEmpty( Queue Q );int IsFull( Queue Q );Queue CreateQueue( int MaxElements );v... 阅读全文
posted @ 2014-03-23 08:55 ITtecman 阅读(1050) 评论(0) 推荐(0) 编辑
摘要:(1)登录QQ; (2)同时按住Shift+Ctrl+Alt+A四个键,然后点击右键; (3)松开Shift键(只松开Shift键,其他键不要松开)。惊喜出现了吧! 阅读全文
posted @ 2014-03-22 18:44 ITtecman 阅读(251) 评论(0) 推荐(0) 编辑
摘要:一般情况下字为32位(4字节)、半字为16位(2字节)、字节为8位(1字节)。 大多数计算机使用字节(8位的数据块)作为最小可寻址的存储器单位,而不是访问存储器中单独的位。存储器的每一个字节都由唯一的数字标识,称为该字节的地址,所有可能地址的集合称为存储器空间。 举例来说,ARM处理器工作状态有如下两种: ARM状态:执行字对齐的32位ARM指令。 Thumb状态:执行半字对齐的16位Th... 阅读全文
posted @ 2014-03-22 13:43 ITtecman 阅读(7480) 评论(1) 推荐(1) 编辑
摘要:转自:http://bbs.ednchina.com/BLOG_ARTICLE_637212.HTM环境:Windows XP + (VMware Workstation - Linux)1、确保虚拟机Linux窗口为当前焦点窗口;2、拔插USB转串口线至少一次;3、在虚拟机Linux下用dmesg | grep usb命令查看到类似以下的信息: usbserial.c: FTDI 8U232AM converter detected usbserial.c: FTDI 8U232AM converter now attached to ttyUSB0 (or usb/tts/0 for de 阅读全文
posted @ 2014-03-22 11:39 ITtecman 阅读(4185) 评论(0) 推荐(0) 编辑
摘要:声明:本程序读入一个中缀表达式,将该中缀表达式转换为后缀表达式并输出后缀表达式。 注意:支持+、-、*、/、(),并且输入时每输入完一个数字或符号都要加一个空格,特别注意的是在整个表达式输入完成时也要加一个空格后再回车。这是该程序的一个不足之处,有待改进。 /* infix_to_postfix.c */#include #include #include #include struct... 阅读全文
posted @ 2014-03-22 10:49 ITtecman 阅读(515) 评论(0) 推荐(0) 编辑
摘要:如果创建的项目中有多个文件时(尤其是编译后的镜像大小超过4K时),一定要在link order栏下调整文件顺序,主要是前几个文件的顺序(2440init.s、2440slib.s、nand.c这三个文件一定要放在最前面),推荐的文件排列顺序从上到下依次为2440init.s、2440slib.s、nand.c、2440lib.c、Main.c...。详情请参考TQ2440开发板使用手册5.3.1ADS1.2新建项目试验小节(包括ADS项目的详细配置过程)。顺序不当,有可能导致编译出的程序烧写到Nand Flash中无法正常运行。使用extern进行外部函数声明(或外部变量声明),使得不同文件可 阅读全文
posted @ 2014-03-21 22:05 ITtecman 阅读(1501) 评论(0) 推荐(0) 编辑
摘要:虚拟机突然蓝屏了,然后就启动不了了,提示“锁定文件失败,打不开磁盘或快照所依赖的磁盘”的解决方法: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提示:锁定文件失败,打不开磁盘或快照所依赖的磁盘,这是因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果突然系统崩溃了,虚拟机就来不急把已经锁定的文件解锁,所以你在启动的时候,就会提示无法锁定文件,如下图: ... 阅读全文
posted @ 2014-03-21 17:49 ITtecman 阅读(1856) 评论(0) 推荐(0) 编辑
摘要:声明:文中“PC虚拟机Linux”是指在PC上安装了虚拟机,然后在虚拟机中装的Linux。 关于NFS的详细介绍可参考:http://www.cnblogs.com/nufangrensheng/p/3486839.html。 在PC虚拟机中的Linux系统中的工作: 所用资源:TQ2440_CD\Linux资源\Linux源码包\2.6.30.4\root_qtopia_2.2.0_2.6... 阅读全文
posted @ 2014-03-21 13:15 ITtecman 阅读(4819) 评论(0) 推荐(0) 编辑
摘要:交叉开发 交叉开发是指先在一台通用PC上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。通用PC称为宿主机,嵌入式设备称为目标机。 交叉开发环境 交叉开发环境(Cross Development Environment)是指编译、链接和调试嵌入式应用软件的环境。它与运行嵌入式应用软件的环境有所不同,通常采用“宿主机——目标机”模式。 开放的交叉开发环境的典型代表是:G... 阅读全文
posted @ 2014-03-21 09:46 ITtecman 阅读(3332) 评论(1) 推荐(1) 编辑
摘要:用户输入一个后缀表达式,程序计算该后缀表达式的值并输出结果: /* postfix_expression.c */#include "stack.h"#include #include #include int main(){ int i, flag; char c, data_string[10]; float data, f1, f2, result; stac... 阅读全文
posted @ 2014-03-21 07:46 ITtecman 阅读(596) 评论(0) 推荐(0) 编辑
摘要:USB烧写 接线:需要连接串口线、USB下载线和电源线。 软件:USB转串口驱动(因为现在的笔记本上一般都没有串口)、USB下载驱动和DNW。 网络烧写 接线:需要连接串口线、网线和电源线。 软件:TFTP代理软件(tftpdwin.exe)和DNW。 Jtag烧写(针对没有并口情况下) 接线:需要连接Jtag线和电源线。(电源线---开发板---Jtag---Jlink---USB... 阅读全文
posted @ 2014-03-20 18:13 ITtecman 阅读(1035) 评论(0) 推荐(0) 编辑
摘要:将EABI-4.3.3_EmbedSky_20100610.tar.bz2复制到Linux系统中 在Linux终端输入如下解压缩命令,会自动解压缩到/opt/EmbedSky/4.3.3/目录下。 在/etc/profile文件中添加如下语句: 在Linux终端输入如下命令使上面修改的配置生效: 在Linux终端输入如下命令验证交叉编译器是否生效: 若编译器生效会出现如下... 阅读全文
posted @ 2014-03-20 16:48 ITtecman 阅读(1584) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.sina.com.cn/s/blog_64fba4e00100mzf9.html 这是由于没有安装.NET framework 所造成的,请安装.NET framework。 【Microsoft .NET Framework 4(独立安装程序)】微软官方下载地址:http://download.microsoft.com/download/9/5/A/95A96... 阅读全文
posted @ 2014-03-20 14:15 ITtecman 阅读(400) 评论(0) 推荐(0) 编辑
摘要:SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。SSH的英文全称是 Secure Shell。传统的网络服务程序,如:ftp 和telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而通过使用 SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。同时通过 SS 阅读全文
posted @ 2014-03-19 12:56 ITtecman 阅读(15793) 评论(0) 推荐(0) 编辑
摘要:检查()、[]、{}是否配对。 /* stack_balance_symbol */#include "stack.h"#include #include #include intmain(int argc, char **argv){ FILE *fp; stack s; char c; char ctmp; if(argc != 2) { ... 阅读全文
posted @ 2014-03-19 09:23 ITtecman 阅读(905) 评论(0) 推荐(0) 编辑
摘要:/* stack.h */#ifndef _stack_h#define _stack_hstruct stack_record;typedef struct stack_record *stack;typedef int element_type;int is_empty( stack s );int is_full( stack s );stack create_stack( int m... 阅读全文
posted @ 2014-03-19 08:38 ITtecman 阅读(2669) 评论(0) 推荐(0) 编辑
摘要:字符I/O int fgetc( FILE *stream );int getc( FILE *stream );int getchar( void );fgetc、getc和getchar:从流中读取下一个字符并返回(getchar总是从标准输入中读);如果流中没有可读的字符那么返回EOF。 int fputc( int character, FILE *stream );int pu... 阅读全文
posted @ 2014-03-19 08:03 ITtecman 阅读(485) 评论(0) 推荐(0) 编辑
摘要:栈的链表实现(缺点:对malloc和free的调用的开销昂贵) 栈ADT链表实现的类型声明 #ifndef _Stack_hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;int IsEmpty( Stack S );Stack CreateStack( void );voi... 阅读全文
posted @ 2014-03-18 21:17 ITtecman 阅读(1152) 评论(0) 推荐(0) 编辑
摘要:辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收。 辅助数据的另一个称谓是控制信息(control information)。 辅助数据由一个或多个辅助数据对象(ancillary data object)构成,每个对象以一个定义在头文件中的cmsgh... 阅读全文
posted @ 2014-03-18 13:40 ITtecman 阅读(3512) 评论(0) 推荐(0) 编辑
摘要:这两个函数是最通用的I/O函数。实际上我们可以把所有read、readv、recv和recvfrom调用替换成recvmsg调用。类似地,各种输出函数调用也可以替换成sendmsg调用。 #include ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct... 阅读全文
posted @ 2014-03-18 11:40 ITtecman 阅读(7508) 评论(0) 推荐(0) 编辑
摘要:这两个函数类似于read和write,不过readv和writev允许单个系统调用读入到或写出自一个或多个缓冲区。这些操作分别称为分散读(scatter read)和集中写(gather write),因为来自读操作的输入数据被分散到多个应用缓冲区中,而来自应用缓冲区的输出数据则被集中提供给单个写操作。 #include ssize_t readv(int filedes, const s... 阅读全文
posted @ 2014-03-18 10:05 ITtecman 阅读(1495) 评论(0) 推荐(0) 编辑
摘要:这两个函数类似于标准的read和write函数,不过需要一个额外的参数。 #include ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);返回:读入或写出字节数——成功;-1... 阅读全文
posted @ 2014-03-18 09:35 ITtecman 阅读(453) 评论(0) 推荐(0) 编辑
摘要:在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。 但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如: StructPacket{ int state; int len; char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持};首先对0长数组做一个解释:用途 ... 阅读全文
posted @ 2014-03-12 22:52 ITtecman 阅读(802) 评论(0) 推荐(0) 编辑
摘要:概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket)。http://www.cnblogs.com/nufangrensheng/p/3583435.html。 原始套接口是一种对原始网络报文进行处理的套接口。原始套接口主要应用在底层网络编程上,同时也是网络黑客的必备手段。例如sniffer、拒绝服务(DoS)、IP地址欺骗等都需要在原始套接字的基... 阅读全文
posted @ 2014-03-12 16:07 ITtecman 阅读(574) 评论(0) 推荐(0) 编辑
摘要:概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同。UNIX域协议可视为进程间通信(IPC)方法之一。 UNIX域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP)。 使用UNIX域套接口的理由有3个: 在源自Berkeley的实现中,UNIX域套接口往... 阅读全文
posted @ 2014-03-12 09:26 ITtecman 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:概述 在名字和数值地址间进行转换的函数: gethostbyname和gethostbyaddr:在主机名字与IPv4地址之间进行转换。仅仅支持IPv4. getservbyname和getservbyport:在服务名字和端口号之间进行转换。 getaddrinfo和getnameinfo:用于主机名字和IP地址之间以及服务名字和端口号之间的转换。(这两个函数是协议无关的) 域名系统 ... 阅读全文
posted @ 2014-03-11 21:27 ITtecman 阅读(1047) 评论(0) 推荐(0) 编辑
摘要:诸如BASIC和FORTRAN等许多语言都不支持指针。如果需要链表而又不能使用指针,这时我们可以使用游标(cursor)实现法来实现链表。 在链表的实现中有两个重要的特点: 数据存储在一组结构体中。每一个结构体包含有数据以及指向下一个结构体的指针。 一个新的结构体可以通过调用malloc而从系统全局内存(global memory)得到,并可以通过free而被释放。 游标法必须能够模仿实现... 阅读全文
posted @ 2014-03-11 20:40 ITtecman 阅读(5626) 评论(0) 推荐(1) 编辑
摘要:基数排序是桶式排序的推广。——《数据结构与算法分析:C语言描述》实例分析基数排序算法思想:假设我们有10个数,范围在0-999之间,我们要将其排序。显然,我们不能使用桶式排序,考虑最坏的情况下我们将需要使用1000个桶,这样桶就太多了。我们的策略是使用多趟桶式排序(对于十进制数来说,其基数为10,对... 阅读全文
posted @ 2014-03-11 10:07 ITtecman 阅读(2800) 评论(0) 推荐(1) 编辑
摘要:概述SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的)。它最初是为满足不断增长的IP电话市场设计的;具体地说,就是穿越因特网传输电话信令。SCTP是一个可靠的面向消息的协议,在端点之间提供多个流,并为多宿提供传输级支持。尽管SCTP和TCP之间存在一些本质性的差别,然而SCTP的一到一(one-to-one)接口与TCP提供的应用接口非常接近。这一点允许轻而易举地移植应用程序,不过没法使用SCTP的某些高级特性。SCTP的一到多(one-to-many)接口提供了这些特性的完全支持,然而可能需要费时费力地重新编写已有的应用程序。对于使用SCTP开发的 阅读全文
posted @ 2014-03-10 22:16 ITtecman 阅读(1385) 评论(0) 推荐(0) 编辑
摘要:概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)。 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须作为参数指定目的地(即服务器)的地址。类似地,服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据... 阅读全文
posted @ 2014-03-10 16:55 ITtecman 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:tcpdump程序 tcpdump一边从网络读入分组一边显示关于这些分组的大量信息。它还能够只显示与所指定的准则匹配的那些分组。 netstat程序 netstat服务于多个目的: (1)展示网络端点的状态。 (2)展示某个主机上各个接口所属的多播组。 (3)使用-s选项显示各个协议的统计信息。 (4)使用-r选项显示路由表或使用-i选项显示接口信息。 lsof程序 名字lsof... 阅读全文
posted @ 2014-03-10 16:09 ITtecman 阅读(701) 评论(0) 推荐(0) 编辑
摘要:概述有很多方法来获取和设置影响套接口的选项:getsockopt和setsockopt函数fcntl函数ioctl函数getsockopt和setsockopt函数这两个函数仅用于套接口。#include int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);返回值:0——成功,-1——出错其中,sock 阅读全文
posted @ 2014-03-10 09:50 ITtecman 阅读(617) 评论(0) 推荐(0) 编辑
摘要:将http://www.cnblogs.com/nufangrensheng/p/3590002.html中的select改用poll。 intmain(int argc, char **argv){ int i, maxi, listenfd, connfd, sockfd; int nr... 阅读全文
posted @ 2014-03-09 16:47 ITtecman 阅读(328) 评论(0) 推荐(0) 编辑
摘要:poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 poll函数原型 #include int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);返回:就绪描述字的个数,0——超时,-1——出错poll函数参数介绍第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个p... 阅读全文
posted @ 2014-03-09 16:12 ITtecman 阅读(779) 评论(0) 推荐(0) 编辑
摘要:函数原型 pselect函数是由POSIX发明的,其原型如下: #include #include #include int pselect (int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timespec *timeout, const sigset_t *s... 阅读全文
posted @ 2014-03-09 15:25 ITtecman 阅读(552) 评论(0) 推荐(0) 编辑
摘要:拒绝服务型攻击的概念 当一个服务器在处理多个客户时,它绝不能阻塞于只与单个客户相关的某个函数调用。否则可能导致服务器被挂起,拒绝为所有其他客户提供服务。这就是所谓的拒绝服务(denial-of-service)型攻击。它就是针对服务器做些动作,导致服务器不再能为其他合法客户提供服务。 拒绝服务型攻击的解决办法 (1)使用非阻塞I/O。 (2)让每个客户由单独的控制线程提供服务(例如创建一个... 阅读全文
posted @ 2014-03-09 14:51 ITtecman 阅读(317) 评论(0) 推荐(0) 编辑
摘要:改写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的TCP回射服务器程序,把它重写成使用select来处理任意数目个客户的单进程程序,而不是为每个客户派生一个子进程。 int main(int argc, char **argv){ int i, maxi, maxfd, listenfd... 阅读全文
posted @ 2014-03-09 14:38 ITtecman 阅读(476) 评论(0) 推荐(0) 编辑
摘要:终止网络连接的通常方法是调用close函数。不过close有两个限制,却可以使用shutdown来避免。 close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口。使用shutdown可以不管引用计数就激发TCP的正常连接终止序列(由FIN开始的四个分节). close 终止数据传送的两个方向:读和写。既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍... 阅读全文
posted @ 2014-03-09 13:01 ITtecman 阅读(372) 评论(0) 推荐(0) 编辑
摘要:我们可以使用select函数重写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的str_cli函数,这样服务器进程一终止,客户就能马上得到通知。早先那个版本的问题在于:当套接口上发生某些事件时,客户可能阻塞于fgets调用。新版本改为阻塞于select调用,等待要么标准输入可读,要么套接口可读。下图展示了调用select所处理的各种条件。... 阅读全文
posted @ 2014-03-09 12:29 ITtecman 阅读(1160) 评论(0) 推荐(0) 编辑
摘要:select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它。 作为一个例子,我们可以调用select,告知内核仅在下列情况发生时才返回: (1)集合{1,4,5}中的任何描述字准备好读,或 (2)集合{2,7}中的任何描述字准备好写,或 (3)集合{1,4}中的任何描述字有异常条件待处理,或 (4)已经... 阅读全文
posted @ 2014-03-09 10:52 ITtecman 阅读(1234) 评论(0) 推荐(0) 编辑
摘要:桶式排序算法描述: 如果我们有N个整数,范围从1到M(或从0到M-1),我们可以利用这个信息得到一种快速的排序,叫做桶式排序(bucket sort)。我们留置一个数组,称之为Count,大小为M,并初始化为零。于是,Count有M个单元(或桶),开始时他们都是空的。当Ai被读入时,Count[Ai]增1。在所有的输入被读进以后,扫描数组Count,打印输出排好序的表。该算法花费O(M+N)。引... 阅读全文
posted @ 2014-03-09 09:07 ITtecman 阅读(1557) 评论(0) 推荐(0) 编辑
摘要:I/O复用(select、poll)典型使用在下列网络应用场合:(1)当客户处理多个描述字(通常是交互式输入和网络套接口)时,必须使用I/O复用。(2)一个客户同时处理多个套接口是可能的,不过比较少见。(3)如果一个TCP服务器既要处理监听套接口,又要处理已连接的套接口,一般就要使用I/O复用。(4)如果一个服务器既要处理TCP,又要处理UDP,一般就要使用I/O复用。(5)如果一个服务器要处理多个服务或者多个协议,一般就要使用I/O复用。I/O复用并非只限于网络编程,许多正式应用也需要使用这项技术。 阅读全文
posted @ 2014-03-08 21:58 ITtecman 阅读(364) 评论(0) 推荐(0) 编辑
摘要:I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被拷贝到内核中的某个缓冲区。第二步就是把数据从内核缓冲区拷贝到应用进程缓冲区。 1、阻塞I/O模型 最流行的I/O... 阅读全文
posted @ 2014-03-08 21:56 ITtecman 阅读(5489) 评论(2) 推荐(2) 编辑
摘要:为了方便操作,Linux提供了一组用于查询协议的值及名称的函数。 xxxprotoxxx()函数: 上面的函数对文件/etc/protocols中的记录进行操作,文件中记录了协议的名称、值和别名等值,与struct protoent的定义一致。 使用协议族函数的例子: 首先,使用setprotoent(1)打开文件/etc/protocols,然后使用函数getprotoby... 阅读全文
posted @ 2014-03-08 17:11 ITtecman 阅读(340) 评论(0) 推荐(0) 编辑
摘要:目录 客户/服务器程序源码 POSIX信号处理 POSIX信号语义 处理SIGCHLD信号 处理僵死进程 处理被中断的系统调用 wait和waitpid函数 wait和waitpid函数的区别 网络编程可能会遇到的三种情况 TCP程序小结 数据格式 回射输入行这样一个客户/服务器程序是一个虽然简单然而却很有效的网络应用程序的例子。实现任何客户/服务器网络应用所需的所有... 阅读全文
posted @ 2014-03-08 15:21 ITtecman 阅读(3972) 评论(0) 推荐(0) 编辑
摘要:/* list_poly.h */#ifndef _LIST_POLY_H#define _LIST_POLY_Hstruct node;typedef struct node *ptr_to_node;typedef struct node *position;typedef struct node *list;list create_list();void insert(int coef... 阅读全文
posted @ 2014-03-08 08:59 ITtecman 阅读(343) 评论(0) 推荐(0) 编辑
摘要:编写一个完整的TCP客户和服务器程序所需要的基本套接口函数:1、socket函数(客户端、服务器端都必须调用)参数family指明协议族(family),该参数也往往被称为协议域(domain)。所以有的书上声明如下:而且对于socket函数第一个参数,在不同书籍上可能会看到不同前缀的取值常量列表,如下两图所示:AF_xxx与PF_xxx:AF_前缀表地址族,PF_前缀表示协议族。历史上曾有这样的想法:单个协议族可以支持多个地址族,PF_值用来创建套接口,而AF_值用于套接口地址结构。但实际上,支持多个地址族的协议族从来就未实现过,而且头文件中为一给定协议定义的PF_值总是与此协议的AF_值相 阅读全文
posted @ 2014-03-07 15:45 ITtecman 阅读(965) 评论(0) 推荐(0) 编辑
摘要:/* poly.h */#ifndef _POLY_H#define _POLY_H#define MAXDEGREE 10struct poly{ int coefarray[MAXDEGREE + 1]; int highpower;};void zero_poly(struct poly *p);void print_poly(const struct poly *p... 阅读全文
posted @ 2014-03-07 11:32 ITtecman 阅读(426) 评论(0) 推荐(0) 编辑
摘要:地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址。 1、inet_aton、inet_addr、inet_ntoa inet_aton、inet_addr和inet_ntoa在点分十进制数串(例如,”206.168.112.96“)与它的32位网络字节序二进制值间转换IPv4地址。 #include int i... 阅读全文
posted @ 2014-03-06 20:41 ITtecman 阅读(319) 评论(0) 推荐(0) 编辑
摘要:#include void bzero(void *dest, size_t nbytes);void bcopy(const void *src, void *dest, size_t nbytes);int bcmp(const void *ptr1, const void *ptr2, size_t nbytes);返回:0-相等,非0-不相等bzero将目标中指定数目的字节置为0;b... 阅读全文
posted @ 2014-03-06 19:56 ITtecman 阅读(288) 评论(0) 推荐(0) 编辑
摘要:前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程。 1、从进程到内核 从进程到内核传递套接口地址结构的函数有3个:bind、connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个参数是结构的整数大小,例如: /* e... 阅读全文
posted @ 2014-03-06 18:09 ITtecman 阅读(850) 评论(0) 推荐(0) 编辑
摘要:前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数。每个协议族都定义它自己的套接口地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结束。 IPv4套接口地址结构 IPv4套接口地址结构通常也称为”网际套接口地址结构“,它以”sockaddr_in“命名,定义在头文件中。其POSIX定义如下: /* sockaddr_in */stru... 阅读全文
posted @ 2014-03-06 17:34 ITtecman 阅读(525) 评论(1) 推荐(0) 编辑
摘要:所有博文中,“套接字”和“套接口”都是指socket,只是不同书籍翻译时用词不同。 阅读全文
posted @ 2014-03-06 16:43 ITtecman 阅读(150) 评论(0) 推荐(0) 编辑
摘要:TCP输出 下图展示了应用进程写数据到TCP套接口的过程。 每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。 当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(... 阅读全文
posted @ 2014-03-06 16:00 ITtecman 阅读(574) 评论(0) 推荐(0) 编辑
摘要:前言 大多数TCP服务器是并发的,大多数UDP服务器是迭代的。 如果服务一个客户请求的时间不长,使用迭代服务器没有太大问题,一旦客户请求的时间需要花费很长,不希望整个服务器被单个客户长期占用,而希望同时服务多个客户,就需要选择并发服务器了。 迭代服务器程序框架 int listenfd,connfd;listenfd = socket( ... );bind(listen, ..... 阅读全文
posted @ 2014-03-06 14:53 ITtecman 阅读(1761) 评论(0) 推荐(2) 编辑
摘要:图1 TCP服务器在端口21上执行被动打开 图2 客户对服务器的连接请求 图3 并发服务器让子进程处理客户请求 ... 阅读全文
posted @ 2014-03-06 14:36 ITtecman 阅读(313) 评论(0) 推荐(0) 编辑
摘要:端口号 端口号(port number):16位整数,用来区分不同的进程。 服务器使用的端口号:TCP和UDP定义了一组众所周知的端口(well-known port),用于标识众所周知的服务。 客户端使用的端口号:通常使用短期存活的临时端口(ephemeral port)。这些端口号通常由传输层协议自动赋予客户。客户一般不关心其临时端口的具体值,而只需确信它在所在主机中是唯一的就行。传输层... 阅读全文
posted @ 2014-03-06 13:31 ITtecman 阅读(862) 评论(0) 推荐(0) 编辑
摘要:Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的 阅读全文
posted @ 2014-03-05 22:03 ITtecman 阅读(485) 评论(0) 推荐(0) 编辑
摘要:认知套接口编程接口 理解原始套接口(raw socket)的概念 值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分。 上图中在TCP和UDP之间留有间隙,用于指出应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket)。 UNIX网络编程中所说的套接口编程接口是应用层到传输层的接口。UNIX网... 阅读全文
posted @ 2014-03-05 21:45 ITtecman 阅读(597) 评论(0) 推荐(0) 编辑
摘要:目录 1、HTTP协议 2、FTP协议 3、TELNET协议 4、NFS协议 1、HTTP协议 应用层协议HTTP协议是Web的核心。HTTP协议在Web的客户程序和服务器程序中得以实现,运行在不同系统上的客户程序和服务器程序通过交换HTTP消息彼此通信。HTTP协议定义数据格式,使得服务器和客户端通过协议进行数据交流。 客户端和服务器交流的基本内容:Web页面(web page... 阅读全文
posted @ 2014-03-05 17:56 ITtecman 阅读(919) 评论(0) 推荐(0) 编辑
摘要:主机字节序:多于一个字节的数据类型(多字节数据类型)在内存中的存放顺序叫主机字节序。 最常见的字节序有两种:小端字节序和大端字节序。 小端字节序:Little Endian,简称LE,将数据的最低字节放在内存的起始位置。也就是说,内存地址较低的字节位存放数据的低位字节,内存地址较高的字节位存放数据的高位字节。可以简记为:高高低低。 大端字节序:Big Endian,简称BE,将数据的高字节放... 阅读全文
posted @ 2014-03-05 16:28 ITtecman 阅读(594) 评论(0) 推荐(0) 编辑
摘要:主机ID全为0:不分配给任何主机,仅用于表示某个网络的网络地址。 主机ID全为1:不分配给任何主机,仅用做广播地址。 IP地址的32位全为1:即255.255.255.255,为有限广播地址(http://baike.baidu.com/view/1262931.htm)。 IP地址的32位全为0:即0.0.0.0,表示主机本身。 IP地址127.0.0.1:特殊的环回接口,常用于在本地进... 阅读全文
posted @ 2014-03-05 15:56 ITtecman 阅读(472) 评论(0) 推荐(0) 编辑
摘要:目录 1、主机到网络层协议:以太网协议 2、IP协议 3、网际控制报文协议(ICMP) 4、传输控制协议(TCP) 5、用户数据报文协议(UDP) 6、流控制传输协议(SCTP) 7、地址解析协议(ARP) 联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是TCP/IP协议栈。 1、主机到网络层协议:以太网协议 主机到网络层主要为... 阅读全文
posted @ 2014-03-05 15:41 ITtecman 阅读(3168) 评论(0) 推荐(0) 编辑
摘要:一、线程的优点 与传统进程相比,用线程来实现相同的功能有如下优点: (1)系统资源消耗低。 (2)速度快。 (3)线程间的数据共享比进程间容易的多。 二、多线程编程简单实例 #include #include #include #include voidthread1_routine(void){ printf("new thread:thread_id is %u, pr... 阅读全文
posted @ 2014-03-05 10:54 ITtecman 阅读(1024) 评论(0) 推荐(0) 编辑
摘要:/* list.h */#ifndef _LINKLIST_H#define _LINKLIST_Hstruct node { int data; struct node *next;};typedef struct node *ptr_to_node;typedef struct node *position;typedef struct node *list;list create_list();void insert(int x, list l, position p);void insert_to_head(int x, list l);void insert_to_tai... 阅读全文
posted @ 2014-03-04 11:21 ITtecman 阅读(757) 评论(0) 推荐(0) 编辑
摘要:一、半双工管道(pipe) 关于管道详细介绍可参考http://www.cnblogs.com/nufangrensheng/p/3560130.html。 1、管道实现父子进程间通信实例: /* pipe.c */#include #include #include #include #include #include #define MAXLINE 1024int main(v... 阅读全文
posted @ 2014-03-03 22:27 ITtecman 阅读(2776) 评论(0) 推荐(0) 编辑
摘要:1、fork()方式 fork()函数以父进程为蓝本复制一个进程,其ID号与父进程ID号不同。在Linux环境下,fork()是以写复制实现的,只有内存等与父进程不同,其他与父进程共享,只有在父进程或者子进程进行了修改后,才重新生成一份。 2、system()方式 system()函数调用”/bin/sh –c command“执行特定的命令(可参考http://www.cnblog... 阅读全文
posted @ 2014-03-03 21:53 ITtecman 阅读(2595) 评论(0) 推荐(0) 编辑
摘要:程序是指令的集合。 进程是运行着的程序。操作系统分配资源的基本单位。 线程是为了节省资源而可以在同一个进程中共享资源的一个执行单位。 阅读全文
posted @ 2014-03-03 21:27 ITtecman 阅读(169) 评论(0) 推荐(0) 编辑
摘要:打开、创建文件: 关闭文件: 读取文件: 写文件: 设定文件偏移量: 获取文件状态: 文件空间映射: 获取和改变已打开文件的属性: 文件输入输出控制: 阅读全文
posted @ 2014-03-03 21:20 ITtecman 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2014-03-03 20:42 ITtecman 阅读(154) 评论(0) 推荐(0) 编辑
摘要:Linux的文件系统是由虚拟文件系统作为媒介搭建起来的,虚拟文件系统VFS(Virtual File System)是Linux内核层实现的一种架构,为用户空间提供统一的文件操作接口。它在内核内部为不同的真实文件系统提供一致的抽象接口。 如下图所示:用户应用程序通过系统调用,与内核中的虚拟文件系统交互,操作实际的文件系统和设备。 阅读全文
posted @ 2014-03-03 20:32 ITtecman 阅读(435) 评论(0) 推荐(0) 编辑
摘要:设备文件是通过mknod命令来创建的。其命令格式为: mknod [OPTION]... NAME TYPE [MAJOR MINOR]TYPE取值:主设备号和次设备号两个参数合并成一个16位的无符号短整形,高8位表示主设备号,低8位表示次设备号。一个设备文件通常与一个硬件设备相关联,或者与硬件设备的某一物理或逻辑分区相关联。但在某些情况下设备文件不会和任何实际的硬... 阅读全文
posted @ 2014-03-03 20:11 ITtecman 阅读(354) 评论(0) 推荐(0) 编辑
摘要:上图中,红色方块内为设备的主设备号,黄色方块内为设备的次设备号。 主设备号是表示系统存取这个设备的“内核驱动”。驱动程序是UNIX系统内核代码中的一部分,其作用是用来控制一种特殊设备的输入输出。大多数的UNIX系统都有多种设备驱动程序,每一个设备文件名中的主设备号就代表这个设备使用的是哪个设备驱动程序。 次设备号:每一个设备文件都有一个次设备号。“次设备号”是一个24位的十六进制数字,其定... 阅读全文
posted @ 2014-03-03 19:39 ITtecman 阅读(1272) 评论(0) 推荐(0) 编辑
摘要:在Linux的文件系统中,索引节点是文件的标识,并且这个值是唯一的,两个不同的文件的索引节点值是不同的,索引节点相同的文件它们的内容是相同的,仅仅文件名不同。修改两个索引节点值相同的文件中的一个文件,另一个文件的内容也跟着发生变化。 索引节点值相同的文件,二者的关系是互为硬链接。当修改其中一个文件的内容时,互为硬链接的文件内容也会随着变化。如果删除互为硬链接关系的某个文件时,其他文件并不受影响。 阅读全文
posted @ 2014-03-03 19:24 ITtecman 阅读(328) 评论(0) 推荐(0) 编辑
摘要:静态链接库 前言静态库是obj文件的一个集合(目标文件中通常仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将其他已经编写好的目标文件引用进来,将没有解析的函数和变量进行解析,通常引用的目标是库),通常静态库以".a"为后缀,名字格式一般为libxxx.a。静态库由程序ar生成。实例程序如下:Main.c #include extern void print_hello();intmain(void){print_hello();}Print_hello.c #include voidprint_hello(){printf("hello\n& 阅读全文
posted @ 2014-03-03 17:21 ITtecman 阅读(16525) 评论(2) 推荐(3) 编辑
摘要:各种平台打开伪终端设备的方法有所不同。在Single UNIX Specification的XSI扩展中包含了很多函数,试图统一这些方法。这些函数的基础是SVR4用于管理基于STREAMS的伪终端的一组函数。posix_openpt用来打开下一个可用的伪终端主设备,该函数是可移植的。#include #include int posix_openpt(int oflag);返回值:若成功则返回下... 阅读全文
posted @ 2014-03-03 11:21 ITtecman 阅读(2105) 评论(0) 推荐(0) 编辑
摘要:引言在终端和运行的程序之间有一个终端行规程(见http://www.cnblogs.com/nufangrensheng/p/3575752.html中的图18-2),通过它我们能够在终端上设置特殊字符(退格、行删除、中断等)。但是,当一个登陆请求到达网络连接时,终端行规程并不是自动被加载到网络连接和登陆程序shell之间的。概述伪终端这个术语暗示对于一个应用程序而言,它看上去像一个终端,但事实上... 阅读全文
posted @ 2014-03-03 10:27 ITtecman 阅读(1279) 评论(0) 推荐(0) 编辑
摘要:大多数UNIX系统都提供了一种功能,可以对当前终端窗口的大小进行跟踪,在窗口大小发生变化时,使内核通知前台进程组。内核为每个终端和伪终端保存一个winsize结构:Struct winsize {unsigned shortws_row;/* rows, in character */unsigned short ws_col;/* columns,... 阅读全文
posted @ 2014-03-02 22:34 ITtecman 阅读(1774) 评论(0) 推荐(0) 编辑
摘要:关闭termios结构中c_lflag字段的ICANON标志就使终端处于非规范模式。在非规范模式中,输入数据并不组成行,不处理下列特殊字符:ERASE/KILL/EOF/NL/EOL/EOL2/CR/REPRINT/STATUS/WERASE.如前所述,规范模式很容易:系统每次返回一行。但在非规范模式下,系统怎样才能知道在什么时候将数据返回给我们呢?解决方法:当已读了指定量的数据后,或者已经过了给... 阅读全文
posted @ 2014-03-02 22:00 ITtecman 阅读(537) 评论(0) 推荐(0) 编辑
摘要:规范模式很简单:发一个读请求,输入完一行后,终端驱动程序即刻返回。下列几个条件都会造成读返回:所要求的字节数已经读到时,读返回。无需读一个完整的行。如果都了部分行,也不会丢失任何信息,下一次读从前一次读的停止处开始。当读到一个行定界符时,读返回。在规范模式中以下5个字符被解释为"行结束":NL、EOL、EOL2、EOF、设置了ICRNL但未设置IGNCR时的CR字符。在这5个行定界符中,其中只有一... 阅读全文
posted @ 2014-03-02 21:29 ITtecman 阅读(587) 评论(0) 推荐(0) 编辑
摘要:前言在Linux系统中,一切设备都看作文件。而每打开一个文件,就有一个代表该打开文件的文件描述符。程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出文件stderr,分别得到文件描述符 0, 1, 2。实例现在来看一个测试ttyname函数的实例(ttyname函数功能是返回在该文件描述符上打开的终端设备的路径名):#include "apue.h"intmain(void){char *name;if(isatty(0)){name = ttyname(0);if(name == NULL)name = "und 阅读全文
posted @ 2014-03-02 20:15 ITtecman 阅读(14805) 评论(0) 推荐(0) 编辑
摘要:历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty. POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字。#include char *ctermid(char *ptr);返回值:若成功则返回指向控制终端名的指针,若出错则返回指向空字符串的指针如果ptr非空,则它被认为是一个指针,指向长度至少为L_ctermid字节的数组,进程的控制终端名存放在该数组中。常量L_... 阅读全文
posted @ 2014-03-02 17:28 ITtecman 阅读(1163) 评论(0) 推荐(0) 编辑
摘要:下列4个函数提供了终端设备的行控制能力。其中,filedes引用一个终端设备,否则出错返回,errno设置为ENOTTY。#include int tcdrain(int filedes);int tcflow(int filedes, int action);int tcflush(int filedes, int queue);int tcsendbreak(int filedes, int ... 阅读全文
posted @ 2014-03-02 14:43 ITtecman 阅读(2199) 评论(0) 推荐(0) 编辑
摘要:波特率(baud rate)是一个以往采用的术语,现在它指的是"位/秒"(bits per second)。虽然大多数终端设备对输入和输出使用同一波特率,但是只要硬件许可,可以将它们设置为两个不同值。#include speed_t cfgetispeed(const struct termios *termptr);speed_t cfgetospeed(const struct termio... 阅读全文
posted @ 2014-03-02 14:25 ITtecman 阅读(1172) 评论(0) 推荐(0) 编辑
摘要:所有的终端选项标志,在程序中都可用tcgetattr和tcsetattr函数(http://www.cnblogs.com/nufangrensheng/p/3576682.html)进行检查和更改。在命令行(或shell脚本)中则可用stty(1)命令进行检查和更改。stty(1)命令是http://www.cnblogs.com/nufangrensheng/p/3575752.html中的表... 阅读全文
posted @ 2014-03-02 14:06 ITtecman 阅读(900) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/nufangrensheng/p/3575752.html 中的表18-1至表18-4中列出的所有选项标志(除屏蔽标志外)都用一位或几位(设置或清除)表示,而屏蔽标志则定义多位,它们组合在一起,于是可以定义多个值。屏蔽位有一个定义名,每个值也有一个名字。例如,为了设置字符长度,首先用字符长度屏蔽标志CSIZE将表示字符长度的位清0,然后设置下列值之... 阅读全文
posted @ 2014-03-02 13:51 ITtecman 阅读(536) 评论(0) 推荐(0) 编辑
摘要:使用函数tcgetattr和tcsetattr可以获得或设置termios结构。这样也可以检测和修改各种终端选择标志和特殊字符,以使终端按我们所希望的方式进程操作。#include int tcgetattr(int filedes, struct termios *termptr);int tcsetattr(int filedes, int opt, const struct termios ... 阅读全文
posted @ 2014-03-02 12:52 ITtecman 阅读(729) 评论(0) 推荐(0) 编辑
摘要:POSIX.1定义了11个在输入时作特殊处理的字符。实现定义了另外一些特殊字符。表18-6摘要列出了这些特殊字符。表18-6 终端特殊输入字符 在POSIX.1的11个特殊字符中,可将其中9个更改为几乎任何值。不能更改的两个特殊字符是换行符和回车符(\n和\r),有些实现也不允许更改STOP和START字符。为了进行修改,只要更改termios结构中c_cc数组的相应项。该数组中的元素都用名字作为下标进行引用,每个名字都以字母V开头。POSIX.1允许禁用这些字符。若将c_cc数组中的某项设置为_POSIX_VDISABLE的值,则禁用相应的特殊字符。实例 在详细说明各特殊字符之前,先看一个更 阅读全文
posted @ 2014-03-02 11:08 ITtecman 阅读(1824) 评论(0) 推荐(0) 编辑
摘要:终端I/O有两种不同的工作模式:规范模式输入处理(Canonical mode input processing)。在这种模式中,终端输入以行为单位进行处理。对于每个读要求,终端驱动程序最多返回一行。非规范模式输入处理(Noncanonical mode input processing)。输入字符并不组成行。如果不作特殊处理,则默认模式是规范模式。V7和较早的BSD风格类的终端驱动程序支持三种终端输入模式:(a)精细加工模式(输入组成行,并对特殊字符进行处理);(b)原始模式(输入不组成行,也不对特殊字符进行处理);(c)cbreak模式(输入不组成行,但对某些特殊字符进行处理)。终端设备是 阅读全文
posted @ 2014-03-01 22:15 ITtecman 阅读(1454) 评论(0) 推荐(0) 编辑
摘要:表一般不用简单数组来实现,通常将其实现为链表。在链表中要不要使用表头则属于个人兴趣问题。在下面的例程中我们都使用表头。按照C的约定,作为类型的List(表)和Position(位置)以及函数的原型都列在所谓的.h头文件中。具体的Node(结点)声明则在.c文件中。如下代码为链表的类型声明: #ifndef _List_Hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;List MakeEmpty( List L );int IsEmpty( List L ) 阅读全文
posted @ 2014-03-01 19:48 ITtecman 阅读(651) 评论(0) 推荐(0) 编辑
摘要:WinSCP下载地址:http://download.pchome.net/internet/ftp/down-34064-1.html 安装很简单,这里就不做介绍。下面是启动后的界面: 在主机名(H)一栏输入Linux的IP地址,端口号默认。然后输入Linux中创建的用户名和密码: 点击登陆,登陆后界面如下: 左边是windows目录,右边是Linux目录,想要传送文件只需拖拽即可。 阅读全文
posted @ 2014-03-01 10:38 ITtecman 阅读(1112) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示