07 2013 档案

摘要:WDF提供了一个统一的大范围的设备类型的驱动程序模型,有如下特征: 1> 支持用户模式和内核模式 2> 对象模型 3> 一个简化对象生存期管理和同步I / O请求的对象的层次结构 4> 一个I / O模型的框架处理与操作系统的交互 5> 外设、视频加速、电源管理的实现提供了强大的状态管理和智能默认处理状态转换 WDF驱动包括KMDF(内核态*.SYS) UMDF(用户态*.DLL) 内核模式驱动程序:作为内核模式操作系统的一部分执行,管理I/O 即插即用 ,电源等,通常为分层结构 用户模式驱动程序:通常为应用程序与驱动程序的接口或其它操作系统接口的驱动程序,用户模 阅读全文
posted @ 2013-07-26 09:43 皁仩腄覺 阅读(308) 评论(0) 推荐(0)
摘要:(1) 安装VS2010(2) 开发包安装 1> 2000/XP/2003下,Windows采用WDM驱动模型(Windows Driver Model),开发2000/XP/2003的驱动开发包为:DDK。 2> Vista及以后版本,采用了WDF驱动模型(Windows Driver Foudation),对应的开发包:WDK。 WDK可以看做是DDK的升级版本,WDK是包含以前DDK相关的功能,XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。 这里选择下载Windows Driver Kit Version 7.1.0 下载地址http:/... 阅读全文
posted @ 2013-07-25 16:59 皁仩腄覺 阅读(167) 评论(0) 推荐(0)
摘要:(1) 基本概念 驱动程序是一个软件组件,可让操作系统和设备彼此通信。例如,假设应用程序需要从设备中读取某些数据。应用程序会调用由操作系统实现的函数,操作系统会调用由驱动程序实现的函数。驱动程序(由设计和制造该设备的同一公司编写)了解如何与设备硬件通信以获取数据。当驱动程序从设备获取数据后,它会将数据返回到操作系统,操作系统将数据返回至应用程序。 (2)驱动程序扩展 1> 并非所有驱动程序都必须由设计该设备的公司编写。在多种情形下,设备根据已发布的硬件标准来设计。这表示驱动程序可以由 Microsoft 编写,设备设计者无须提供驱动程序。 2> 并非所有驱动程序都直接与设备... 阅读全文
posted @ 2013-07-25 15:49 皁仩腄覺 阅读(265) 评论(0) 推荐(0)
摘要:GTK提供了一套打印技术CUPS 阅读全文
posted @ 2013-07-22 09:18 皁仩腄覺 阅读(456) 评论(0) 推荐(0)
摘要:注:图片来自于博客 http://blog.163.com/hbu_lijian/blog/static/126129153201201710456994/ fstream 中IO对象常用的是iftream(文件输入流) ,ofstream(文件输出流),用来读写文件。 最近工程中用到socket 接收收据,接收到的数据是一个图像,接收完之后用于打印,由于图像接收完整之后才能打印。 一开始我就想建立一个文件保存数据,等保存完毕之后在打开一个文件,读入数据流然后用于打印。结果发现在大规模的接收文件时候效率很低。 我在想是否可以既有输入又有输出特性,我想到了管道。但有觉得不合适。我不可能为每... 阅读全文
posted @ 2013-07-19 17:28 皁仩腄覺 阅读(506) 评论(0) 推荐(0)
摘要:windows 编程遇见最多问题莫过于这俩字符编码格式了。 有时候工程中用unicode 编码。而调用一些老版本的库 这些库采用多字符编码。在用时需要使用到WideCharToMultiByte 函数进行转换。 一次我在合别人代码到工程中时候看到广泛采用"char"形式的字符串,然后在较高版本的vs 中工程基本都是 unicode 编码。1> 一种方法是 把原先代码编译成库函数直接调用 改动少;2>另一种方法是更改源代码系统调用函数为多字符 微软一般系统调用有两种形式,采用宏定义在不同平台使用系统调用; FuctionNameA(...) FuctionName 阅读全文
posted @ 2013-07-19 17:03 皁仩腄覺 阅读(172) 评论(0) 推荐(0)
摘要:当了4年码农,如今还在继续。不是因为工资高,而是我还保留着当初那份编码的激情。 新手编程 包括很多工作4,5年的程序员 常见毛病如下: 1>堆积代码问题,实现一个功能代码堆积如山,该封装成函数的不分装,很多地方都有重复代码。而且重复率大于2。 2>命名规范问题,变量函数都无特定命名,且没有注释阅读困难维护困难。 3> C++ 和 C 混用问题。 C重上使用全局变量,C++讲究封装。所以混用时候一定注意全局变量的定义使用。 4> 程序注释问题,意思表达不清楚 错误表达。 5> 代码优化问题,写过的代码从来不进行优化。 6> 急于动手问题,给一个任务,不加... 阅读全文
posted @ 2013-07-16 17:43 皁仩腄覺 阅读(250) 评论(0) 推荐(0)
摘要:工程中很多时候都会使用别人经过验证的库,或者第三方提供的库,现在很多工程中实际开发中是以库的形式对外发布,库主要分为静态库和动态库。 静态库: 编译时候加载进目标文件内部。程序运行时不需要该库。命名libxxx.a 动态库: 编译时链接至目标文件,只在目标文件内部指出连接地址。程序运行时加载动态库。 命名libxxx.so; 实例讲解: 本章实现 加法 、减法静态库,然后实现乘法、除法动态库。然后在main中调用。 现将每个文件代码列出如下: 注意:源代码拷贝编译可能通不过,原因是有些括号是中文符号。改之则可。 //add.cint addNum(int a,... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(184) 评论(0) 推荐(0)
摘要:注意:本章使用第十一章的源码直接编译生成可执行文件 不在生成库 一种简单的方法就是将所有源文件都设置到VPATH路径下。然后像普通makefile 生成。我们不讨论这种情况。 先来看我们程序的目录组织结构 --- main.c ---common.h ---addsub --- add.c --- sub.c ---muldiv --- mul.c --- div.c Makefile组织: 1、各个子目录单独使用Makefile,主要生成相关的库,或者目标文件; 2、顶层Makefile负责将本目录下源代码文件编译成目标文件... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(280) 评论(0) 推荐(0)
摘要:(1 )errno 在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。每个线程都有自己的errno,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。 errno这个全局变量在, extern int * __errno_location(void); #define errno (*__errno_location())。关于errno有三点需要特别注意: 1> 如果系统调用或库函数正确执行的话,errno的值是不会被清零。所以,在利用errno之前,最好先对函数的返回值进行判断,看是否发生了错误,返回值错误再利用errno判断 阅读全文
posted @ 2013-07-16 17:01 皁仩腄覺 阅读(320) 评论(0) 推荐(0)
摘要:(1) 阻塞模型 没有数据到达时候程序会一直阻塞直到有数据到达 如tcp 的recv 函数,当然也可以设置超时。(2)非阻塞I/O模型 通过fcntl函数设置socket 非阻塞模型 fcntl(sockfd, F_SETFL, O_NONBLOCK);如果没有数据到达会返回一个错误码。一般对于一般都对非阻塞I/O模型进行轮询,就是一直在检查这个状态,查看有无数据到达。(3)3. I/O复用模型 select模型 (重点) 利用select函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时,调用recv(或send)从没有数据的套接字上... 阅读全文
posted @ 2013-07-16 15:19 皁仩腄覺 阅读(290) 评论(0) 推荐(0)
摘要:(一) 守护进程 守护进程(Daemon)是指那些随着系统启动,一直运行于系统整个生命周期的系统程序,它们一般不受用户登录注销影响。 它独立于控制终端并且周期性地执行某种任务或等待。 会话(session)是一个多个进程组的集合,每个进程都有一个父进程并且属于一个进程组,每个进程组都有一个进程组号,该号等于该进程组组长的PID号,一个进程只能为它自己或子进程设置进程组ID号。 每个进程都属于一个进程组,而进程组又属于某个会话。当用户从终端登录系统(不管是终端还是伪终端),系统会创建一个新的会话。在该终端上启动的进程都会被系统划归到会话的进程组中。 会话中的进程通过该会话中的领头进程... 阅读全文
posted @ 2013-07-16 11:15 皁仩腄覺 阅读(898) 评论(0) 推荐(0)
摘要:很多时候我们要开发 服务器程序应用linux 和windows平台,很多时候得两套开发代码。我这里选择跨平台开发,已经在windows7 和 ubuntu 12.04 下,经过测试,windows 称服务,linux称守护进程,本质都是一样。 如果对服务守护进程不是很了解,可以参考【linux c 速学笔记】/【守护进程与socket编程】一章 ttp://www.cnblogs.com/wolfrickwang/p/3192949.html 关于命名规范问题,由于本程序在windows 平台下面编写,linux 下面测试 所以命名规范偏向windows 平台开发惯用命名规范。 现将... 阅读全文
posted @ 2013-07-16 11:15 皁仩腄覺 阅读(520) 评论(0) 推荐(0)
摘要:长久以来为linux 提供的打印是lp 系统,打印的时候直接将文件输入设备 使用如下命令。(一) 命令 lp [options] filename lpr [options] filename options 的值可能如下: -n number - 打印几份 -t title - 打印标题 -d destination 打印机名称 -c (default) 打印之前将任务添加到打印队列 -s(default) 打印之前不讲任务添加到打印队列 -o option 其它额外信息 -P prior 设定打印的优先级别 (二)举例 ... 阅读全文
posted @ 2013-07-15 10:01 皁仩腄覺 阅读(492) 评论(0) 推荐(0)
摘要:(1) 线程的概念 相信很多读者参加面试笔试的时候都被问及线程与进程的区别。我做概要分析如下 1> 进程是线程的载体,一个进程包含一个以上的线程,这些线程运行在进程的地址空间。 2>进程是系统资源的分配拥有着,所有进程内的线程均可访问资源。 3> 线程是处理器调度的基本单位,但进程不是 。 4> 每一个进程都有一个主线程,其它线程均有主线程直接简介产生。(2) 线程的控制 #include int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *( 阅读全文
posted @ 2013-07-12 15:44 皁仩腄覺 阅读(307) 评论(0) 推荐(0)
摘要:信号机制是linux 学习的一个难点,不像windows 消息那么简单。 (1) 信号的概念与产生 信号就是系统发给进程的命令, 有人叫软中断。我认为这是不确切的,因为中断是中止进程立刻进入中断指令。 而信号的执行要看系统内核的调度。 1> 终端键盘,I/O设备 eg: 键盘上CTRL+C 2> 调用系统函数发送信号 eg: kill SIGSEGV 7000或者 raise SIGSEGV 3> 软件条件 eg:alarm 函数 linux 系统定义信号如下,具体各个信号含义查阅相关文档。1)SIGHUP 2)SIGINT 3)S... 阅读全文
posted @ 2013-07-11 17:42 皁仩腄覺 阅读(285) 评论(0) 推荐(0)
摘要:管道分类: 根据进程的相互关系,可以分为:匿名管道与命名管道(1) 匿名管道 pipe#include int pipe(int pipes[2]); 管道是父进程和子进程间 单向的通讯机制。通过上述函数创建管道 会在内存开辟一块缓冲区,pipes[0] 读端,1写端。默认的是阻塞模式。 下面是一个简单的例子:#include #include #include #include void read_from_pipe(int pipe){ char ch; while(read(pipe, &ch, sizeof(char)) > 0 ) //block read ... 阅读全文
posted @ 2013-07-11 16:02 皁仩腄覺 阅读(210) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2013-07-11 14:13 皁仩腄覺 阅读(17) 评论(0) 推荐(0)
摘要:我选择的开发环境是ubuntuQilin 安装在wmware 中。 之所以选这个系统是因为它是中文linux 帮助文档都是中文。 安装samba 服务 主要是为了在windows 上编辑文件,在linux中编译。 没几个人相信命令行的vi 强于图形界面的文本编辑器。 Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。 (1)samba的安装:sudoapt-getinsallsambasudoapt-getinstallsmbfs (注意:新版本的samba服务中这一步已经不需要了)(2)创建共享目录:sodu mkdir/home/sambashares... 阅读全文
posted @ 2013-07-11 14:09 皁仩腄覺 阅读(219) 评论(0) 推荐(0)
摘要:注意:makefile仅仅是一个编译期的一个过程,随时可以修改,应尽量简单化,避免太复杂的逻辑,修改不便。 从工程中来看makefile 尽量在短时间内完成需要的时候可以修改。不用占据很长世间。 在这里我强烈建议手写makefile ,避免使用automaker autoconfig 之类的工具生成makefile 即使编译出错手写的也容易检查。本文只列出常用makefile 特性,对于其它不常用的建议参考gun make手册。(1) makefile 的三条规则 1> 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 2> 如果这个工程的某几个C 文件被修改,那么我 阅读全文
posted @ 2013-07-11 14:08 皁仩腄覺 阅读(305) 评论(0) 推荐(0)
摘要:学习linux/unix 编程 shell脚本毕不少。 本文只有全面介绍,详细介绍查阅相关资料。只让读者对脚本有个简单了解。现实中也不大可能把所有记住,只要有印象出来查阅资料就行。(1)基本结构 1> shbang 脚本文件的第一行 通知内核使用那种脚本解释器 #!后面跟解释器路径名 eg:#!bin/bash 2> 注释 以#开始的行 3> 通配符 包括正则表达式 * ? [] 还有I/O重定向 管道 | 等,具体查阅相关知识 4> 显示输出 echo 命令 5> 局部变量 eg:varname=value1 myname=“wxr” itegerNum=10 阅读全文
posted @ 2013-07-11 14:06 皁仩腄覺 阅读(227) 评论(0) 推荐(0)
摘要:注意 : 本文不做命令详细解释,只做命令快速入门。详细命令使用可使用命令帮助,稍后会解释。shell 的命令基本格式 : [Command] [Option] [Param] 即 命令 选项 参数 中间 ,这三项中间以空格相隔。 (1) 帮助类命令1> help 显示shell 所有命令 eg: $ help 2>help [Command] 获取命令帮助信息 eg: $ help pwd 3>[Command] --help 只显示命令帮助概要信息 eg: $ls --help 4> man [Command] 查看手册页帮助 eg: $m... 阅读全文
posted @ 2013-07-11 14:02 皁仩腄覺 阅读(204) 评论(0) 推荐(0)