欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年C语言编程技巧 .pdf

    • 资源ID:34883814       资源大小:232.22KB        全文页数:24页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年C语言编程技巧 .pdf

    C 语言编程常见问题解答之常用函数的包含文件(1)- 函数包含类别功能_atold math.h 数学子程序把字符串转换为浮点数_beginthread process.h 进程控制子程序启动执行一个新线程_bios_disk bios.h 接口子程序输出 BIOS 磁盘驱动器服务_bios_equiplist bios.h 接口子程序检查设备_bios_keybrd bios.h 接口子程序直接使用BIOS 的键盘接口_bios_memsize biosd.h 存储子程序返回内存大小_bios_printer bios.h 接口子程序直接调用 BIOS 服务进行打印机I/O _bios_timeofday bios.h 时间和日期子程序读取或设置BIOS 时钟_biosserialcom bios.h 接口子程序进行串行 I/O _c_exit process.h 进程控制子程序不终止程序执行如同_exit 的清除_cexit process.h 进程控制子程序不终止程序执行如同_exit 的清除_chdrive direct.h 目录控制子程序设置当前驱动器_chian_intr dos.h 接口子程序_chmode io.h 输入输出子程序改变文件的存取权限_clear87 float.h 数学子程序清除浮点状态字_close io.h 输入输出子程序关闭文件( 3。 1)以下版本_control87 float.h 数学子程序处理浮点控制字_creat io.h 输入输出子程序创建一个新文件或重写一个已存在的文件_disable dos.h 接口子程序屏蔽中断_dos_allocmem dos.h 存储子程序_dos_close dos.h 输入输出子程序关闭一个文件_dos_craete dos.h 输入输出子程序创建一个新文件或重写一个已存在的文件_dos_createnew dos.h 输入输出子程序创建一个新文件_dos_findfirst dos.h 目录控制子程序搜索一个磁盘目录_dos_findnext dos.h 目录控制子程序继续 _dos_findfirst 的搜索_dos_freemem dos.h 存储子程序_dos_getdate dos.h 时间和日期子程序取得和设置系统日期_dos_getdiskfre dos.h 目录控制子程序取得磁盘空闲空间_dos_getdrive dos.h 目录控制子程序取得和设置当前驱动器号_dos_getfileatt dos.h 输入输出子程序取得和设置文件属性_dos_getftime dos.h 输入输出子程序取得和设置文件日期和时间_dos_gettime dos.h 时间和日期子程序取得和设置系统时间_dos_getvect dos.h 接口子程序取得中断向量_dos_keep dos.h 接口子程序_dos_open dos.h 输入输出子程序打开一个文件用于读和写_dos_read dos.h 输入输出子程序从文件读_dos_setblock dos.h 存储子程序_dos_setdate dos.h 时间和日期子程序设置系统日期_dos_setdrive dos.h 目录控制子程序设置当前驱动器号_dos_setfileatt dos.h 输入输出子程序设置文件属性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - _dos_setfitme dos.h 输入输出子程序设置文件时间_dos_settime dos.h 时间和日期子程序设置系统时间_dos_setvect dos.h 接口子程序设置中断向量_dos_write dos.h 输入输出子程序写向文件_enable dos.h 接口子程序开硬件中断_exit process.h 进程控制子程序终止程序_fpresent float.h 数学子程序重新初始化浮点数学包_fsopen stdio.h 输入输出子程序_fullpath stdlib.h 目录控制子程序把相对路径名转换为绝对路径名_getdcwd direct.h 目录控制子程序取得指定驱动器的当前目录_getdrive direct.h 目录控制子程序取得当前驱动器号_graphfreemem graphics.h 图形子程序可修改的图形内存释放函数_graphgetmem graphics.h 图形子程序可修改的图形内存分配函数_harderr dos.h 接口子程序建立一个硬件错误处理程序_hardresume dos.h 接口子程序硬件错误处理函数_hardretn dos.h 接口子程序硬件错误处理函数_heapadd alloc.h 添加一个块到堆上_heapmin malloc.h 释放无用的堆区域_hea 视频教程 pset malloc.h 用一个常量值填充堆上的自由块_initEasyWin io.h 初始化 Ease windows _lrotl stdlib.h 数学子程序将无符号长整型数向左循环移位_lrotr stdlib.h 数学子程序将无符号长整型数向右循环移位_makeepath stdlib.h 目录控制子程序生成一个路径_matherrl math.h 诊断子程序用户可修改的数学错误处理程序_matherrl math.h 数学子程序用户可修改的数学错误处理程序_open io.h 输入输出子程序打开一个文件进行读和写_OvrInitEms dos.h 初始化复盖治理程序用于交换EMS 内存_OvrInitExt dos.h 初始化复盖治理程序用于交换EXT 内存_pclose stdio.h 等待一个管道命令结束_popen stdio.h 创建一个子命令处理程序管道_read io.h 输入输出子程序读文件( 3。1 以下版本)_rotl stdlib.h 嵌入子程序将一个无符号整数左循环移位_rotl stdlib.h 数学子程序把一个无符号整数左循环移位_rotr stdlib.h 嵌入子程序将一个无符号整数向左循环移位_searchstr stdlib.h 为某文件查找某些目录_setcursortype graphics.h 图形子程序选择光标类型_setcursortype conio.h 输入输出子程序选择光标类型_setcursortype conio.h 文本窗口显示子程选择光标类型_splitpath stdlib.h 目录控制子程序将一个全限定的路径名分解各个成份_status87 float.h 数学子程序取浮点状态_strdate stdlib.h 转换子程序把当前日期转换成字符串_strerror string.h stdio 输入输出子程序建立用户定义的错误信息_strtime stdlib.h 转换子程序转换当前日期为字符串名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - _strtold stdlib.h 转换子程序_strtold stdlib.h 数学子程序_tolower ctype.h 转换子程序把字符转换成小写字母_write io.h 输入输出子程序写文件abort process.h 进程控制子程序异常终止一进程abs stdlib.h compl 数学子程序返回整数的绝对值absl math.h 数学子程序计算复数的模absread dos.h 接口子程序读磁盘的绝对扇区abswrite dos.h 接口子程序写磁盘的绝对扇区access io.h 输入输出子程序确定文件的存取权限acos math.h complex 数学子程序计算反余弦值acosl math.h 数学子程序计算反余弦值alloca malloc.h 存储子程序分配临时堆栈空间allocm dos.h 存储子程序分配 DOS 内存arc graphics.h 图形子程序画园弧arg complex.h 数学子程序求复平面中一个复数的弧度asctime time.h 时间和日期子程序转换日期和时间为对应的ASCII 码asin math.h complex 数学子程序反正弦函数asinl math.h 数学子程序反正弦函数assert assert.h 诊断子程序条件终止函数atan2 math.h complex 数学子程序计算 y/x 的反正切值atan2l math.h 数学子程序计算 y/x 的反正切值atof stdlib.h 转换子程序将字符串转换为浮点数at of math.h stdlib. 数学子程序将字符串转换成浮点数atoi stdlib.h 转换子程序将字符串转换为整数atoi stdlib.h 数学子程序把字符串转换成整型数atol stdlib.h 转换子程序将字衔串转换成长整型数atol stdlib.h 数学子程序抬字符串转换为长整型bar graphics.h 图形子程序画二维条形图bar3d graphics.h 图形子程序画一个三维条形图bcd bcd.h 数学子程序把一个数转换为相对应的BCD 码bdos dos.h 接口子程序DOS 系统调用bdosptr dos.h 接口子程序DOS 系统调用bioscom bios.h 接口子程序I/O 通讯biosdisk bios.h 接口子程序调用 BIOS 磁盘驱动程序bioseqiplist bios.h 接口子程序检查设备bioskey bios.h 接口子程序调用 BIOS 的键盘接口biosmemory bios.h 接口子程序返加内存的大小biosprintf bios.h 接口子程序调用 BIOS 的打印 I/O 接口biostime bios.h 接口子程序读取或设置BIOS 时钟brk alloc.h 存储子程序改变数据段内存分配cabs math.h 数学子程序计算复数的模calloc alloc.h stdlib 存储子程序分配内存ceil math.h 数学子程序舍入名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - ceill math.h 数学子程序舍入cgets conio.h 输入输出子程序读字符串chdir dir.h 目录控制子程序改变当前目录chmod io.h 输入输出子程序改变文件存取权限chsize io.h 输入输出子程序修改文件长度circle graphics.h 图形子程序画园cleardevice graphics.h 图形子程序清图形屏幕clearerr io.h 输入输出子程序复位错误标志clearviewport graphics.h 图形子程序清除当前图形窗口close io.h 输入输出子程序关闭文件closedir direct.h 目录控制子程序关闭目录流closegraph graphics.h 图形子程序关闭图形系统clreol conio.h 文本窗口显示子程清除从当前光标位置到行尾的字符clrscr conio.h 文本窗口显示子程清除文本窗口,并把光标放在左上角complex complex.h 数学子程序创建复数conj complex.h 数学子程序求复数的共轭复数coreleft alloc.h stdlib 存储子程序返顺未使用的内存大小cos math.h complex 数学子程序计算余弦值cosh math.h complex 数学子程序计算双曲余弦值coshl math.h 数学子程序计算双曲余弦值cosl math.h 数学子程序计算余弦值country dos.h 接口子程序读取与特定国家有关的格式cprintf conio.h 输入输出子程序格式化并输出数据到屏幕cputs conio.h 输入输出子程序输出一字符串到屏幕creat io.h 输入输出子程序创建一个新文件或重写一个已存在的文件creatnew io.h 输入输出子程序创建新文件creattemp io.h 输入输出子程序创建一个文件名唯一的文件cscanf conio.h 输入输出子程序从控制台执行格式化输入ctime time.h 时间和日期子程序把日期和时间转化为对应的字符串ctrlbrk dos.h 接口子程序设置 CTRL-BREAK处理程序delay dos.h 杂类子程序暂停 DOS delline conio.h 文本窗口显示子程在文本窗口中删去一行detectgraph graphics.h 图形子程序检测硬件并确定使用何种图形驱运程序和图形difftime time.h 时间和日期子程序计算二个时刻的时间差disable dos.h 接口子程序屏蔽中断css.shtml target=_blank title = div 视频教程 div math.h 数学子程序将二个整数相除,返回商和余数dosexterr dos.h 接口子程序获取扩展错误信息dostounix dos.h 时间和日期子程序把日期和时间转换成UNIX 格式drawpoly graphics.h 图形子程序绘制多边形dup io.h 输入输出子程序复制文件句柄dup2 io.h 输入输出子程序将一个文件句柄复制到一个已有的文件句柄名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - ecvt stdlib.h 转换子程序把浮点数转换成字符串ecvt stdlib.h 数学子程序把浮点数转换为字符串elipse graphics.h 图形子程序绘制椭园enable dos.h 接口子程序开硬件中断eof io.h 输入输出子程序检测文件是否结束execle process.h 进程控制子程序装入并运行其它程序execlp process.h 进程控制子程序装入并运行其它程序execlpe process.h 进程控制子程序装入并运行其它程序exect process.h 进程控制子程序execv process.h 进程控制子程序装入并运行其它程序本文章来自 21 视频教程网C 语 言 编程 常 见问 题解 答 之常 用 函数 的包 含 文件 ( 1) _C 语言 程序 设 计教 程原 文链 接 :http:/ C 语言编程常见问题解答之杂项(Miscellaneous) (2)- 请参见:2012 怎样把数据从一个程序传递到另一个程序? 2017 可以使热启动 (Ctrl+Alt+Delete) 失效吗 ? 2110 什么是动态连接? 209 为什么要使用静态变量静态变量作为一个局部变量是很合适的,它在函数退出后不会失去其本身的值。例如,有一个要被调用很多次的函数,它的一部分功能就是计算自己被调用的次数。你不能用一个简单的局部变量来实现这部分功能,因为每次进入该函数时,这个变量都没有被初始化。假如把这个计数变量说明为静态的,那么它就会象一个全局变量那样保留自己的当前值。那么为什么不直接使用一个全局变量呢?你可以使用一个全局变量,而且这样做没有错误。问题是使用了大量全局变量的程序维护起来很麻烦,尤其是有许多函数都各自访问一个全局变量的程序。再说一遍,这样做没有错误,这只是一个程序设计和可读性是否好的问题。假如你把这样的变量说明为静态的, 你就可以提醒自己(或者其它可能读你的程序的人)它是局部变量, 但要象全局变量那样被处理 (保留自己的值)。假如你把它说明为全局的,那么读这个程序的人一定会认为有很多地方要引用它,尽管实际上并不是这样。总而言之,当你需要一个能保持自己的值的局部变量时,使用静态变量是一种好的编程习惯。请参见:217 可以头文件中说明static 变量吗 ? 2010 怎样在一个程序后面运行另一个程序? 显然,在一个程序后面运行另一个程序的最简单的办法是把它们依次列入一个批处理文件中,在执行该批处理文件时,其中所列的程序就会依次运行。然而,这是一种人们已经知道的办法。在 c 或 DOS 中,都没有一种特定的方法来完成“在一个程序结束后运行另一个程序”这样一种函数调用。然而,c 提供了两组函数,它们答应一个程序随时可以运行另一个程序,而后者的运行将结束前者的运行。假如你将这样的一个函数调用放到第一个程序的末尾,你就能达到上述目的。C所提供的这两组函数实际上是由exec()和 spawn()所代表的两个函数族,其中的每一个函数都具有一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 种区别于同族其它函数的功能。exec()函数族包括这样一些成员:execl(), execle(), execlp(), execlpe(),execv(),execve(),execvp()和 execvpe()。下面列出了这此函数名中的e,l,p 和 v 等后缀的含义:e 明确地把一个指向环境参数的指针数组传递给子进程l 把命令参数逐个传递给要执行的程序p 通过环境变量PA TH 找到要执行的文件v 把命令行参数以一个指针数组的形式传递给要执行的程序在程序中选用哪一个函数完全取决于你以及要执行的程序的需要。下例中的程序调用了其参数由命令行指定的另一个程序:# include # include char * envString = / * environment for the app * / COMM VECTOR=0 x63, /* communications vector */ PARENT=LAUNCH. EXE, / * name of this app * / EXEC=EDIT. COM, / * name of app to exec * / NULL ; / * must be NULL-terminated * / void main(int argc, char *argv) / * Call the one with variable argumets and an enviroffment * / _execvpe ( EDIT. COM, argv, envString ) ; printf(If you can read this sentence, the exec didnt happen!n) ; 上面这个短小的例子调用_execvpe()来执行DOS 的文件编辑器EDIT COM ,EDIT 程序的参数来自该例的命令行。在调用execvpe()函数后,上例中的程序就结束了;当EDIT 程序退出时,你将返回到 DOS 提示符。假如printf() 语句的打印内容显示在屏幕上,则说明_execvpe()函数调用出了问题,因为假如它调用成功,就不会有上述结果。注重,上例所提供的EDIT.COM 的环境变量是没有任何意义的,然而,假如上例要执行一个需要环境变量的程序,那么所提供的环境变量就能供该程序使用了。用 spawn()函数同样可以完成上例所做的工作。spawn()函数族包括这样一些成员:spawnl() ,spawnle()。spawnlp(),spawnlpe(),spawnv() ,spawnve(),spawnvp()和 spawnvpe()。这些函数名中的e,l,p 和 v 等后缀的含义与exec()族函数名中的相同。实际上,spawn()函数族与exec()函数族基本相同,只不过有一点小小的差别spawn() 函数既可以在结束原来的程序后启动另一个程序,也可以启动另一个程序并在该程序结束后返回到原来的程序。spawn() 函数的参数与exec()函数的基本相同,只不过需要增加一个参数一你必须用_P_OVERLAY( 结束原来的程序)或_P_WAIT( 结束后返回到原来的程序)作为 spawn()函数的第一个参数。 下例用 spawn()函数完成了与前面的例子相同的工作:# include # include char * envString = / * environment for the app * / COMM VECTOR = 0 x63, / * communications vector * / PARENT=LAUNCH. EXE, / * name of this app * / EXEC=EDIT. COM , / * name of app to exec * / NULL ; / * must be NULL-terminated * / void 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - main(int argc, char *argv) / * Call the one with variable argumets and an environment * / _spawnvpe (_P_OVERLAY , EDIT. COM, argv, envString) ; printf(If you can read this sentence, the exec didnt happen!n ); 这里唯一的区别是exec”变为 spawn ,并且增加了模式(mode)参数。 spawn()函数有覆盖和等待两种相对立的功能,它使你可以在spawn()运行期间做出是等待还是离开的决定。实现上,P_WAIT参数回答了下一个问题。请参见:2011 怎样在一个程序执行期间运行另一个程序? 2011 怎样在一个程序执行期间运行另一个程序? 正如你在2010 的例子中看到的那样,spawn()函数族答应在一个程序中启动另一个程序,并在后者结束后返回到前者之中。有关spawn()函数的背景知识和例子(你只需把其中的_P_OVERLAY改为 _P_WAIT) 请参见 2010。然而,还有另外一种方法可以完成这项工作,即使用 system()函数。system()函数与 exec()或 spawn()函数相似,但也不有同之处。除了挂起(而不是结束)当前程序去执行新程序外,system() 还要启动COMMAND COM 命令翻译程序 (或者其它任何运行在你的计算机上的命令翻译程序)。假如它找不到 COMMAND COM 或类似的程序, 那么它就不会去执行所要求的程序(这一点与exec()或 spawn()函数不同 )。下例是调用EDIT COM 打开一个文件的另一个程序版本,其中的文件名也来自该例的命令行:# include # include # inclued char argStr255 ; void main(int argc, char *argv) int ret ; / * Have EDIT open a file called HELLO if no arg given * / sprintf (argStr ,EDIT %s, (argv1 = NULL?HELLO :argyll3) ) ; / * Call the one with variable arguments and an environment * / ret = sytem (argStr) ; printf(system() returned %dn ,ret) ; 与 2010 中的例子一样(使用 _P_WAIT) ,在 system()调用后面的print() 语句会被执行,因为原来的程序只是被挂起而不是被终止。在每一种情况下, system() 都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。请参见:2010 怎样在一个程序后面运行另一个程序? 2012 怎样把数据从一个程序传给另一个程序? 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - 有好几种基本的方法可以完成这项任务- 你可以通过文件或内存来传递这些数据。这些方法的步骤都相当简洁:首先,定义在何处存放数据,如何获取数据,以及如何通知另一个程序来获取或设置数据;然后,你就可以获取或设置数据了,尽管使用文件的技术定义和实现起来都比较简单,但它的速度往往比较慢(并且轻易引起混乱)。因此, 这里重点讨论内存数据转移技术。下面将依次具体地分析这一过程的每一个环节:定义在何处存放数据。当你编写要共享数据的两个程序时,你应该让程序知道要访问的数据存放在何处。这个环节同样有几种实现方法:你可以在一个 (或每个 )程序中建立一个固定的内部缓冲区,并在两个程序之间传递指向这个缓冲区的指针;你也可以为数据分配动态内存,并在两个程序之间传递指向该数据的指针;假如要传递的数据很小,你还可以通过CPU 的通用寄存器来传递数据(这种可能性很小,因为x86 结构的寄存器很少)。分配动态内存是最灵活和模块性最强的方法。定义获取数据的方法。这个环节非常简洁你可以使用fmemcpy() 或等价的内存拷贝函数。显然,在获取和设置数据时都可以使用这个函数。定义通知另一个程序的方法。因为DOS 并不是一个多任务操作系统,所以其中一个(或两个 )程序的一部分必须已经驻留在内存中,并且可以接受来自另一个程序的调用。同样,这个环节也有几种方法可供选择:第一个程序可以是一个列入CONFIG SYS 中的驱动程序,它在系统启动时就被装入内存;第一个程序也可以是一个TSR( 终止并驻留 )程序,在它退出时会把与第二个程序相互作用的那部分程序驻留在内存中;此外, 你也可以在第一个程序中利用system()或 spawn()函数 (见 20 11)来启动第二个程序。你可以根据需要选择合适的方法。因为有关DOS 驱动程序的数据传递在DOS文档中已经有详尽的描述,而有关system()和 spawn()函数的内容也已经在前文中介绍过,因此下面介绍 TSR 方法。下面的例子给出了两个程序:第一个程序是一个完整的TSR 程序,但为了突出整个过程中的要害环节,它写得比较单薄(见 2015 中的解释 )。这个 TSR 程序先是安装了一个中断63H 的中断服务程序,然后调用终止并驻留退出函数,在执行这个TSR 程序后,执行下文给出的另一个程序。这个程序只是简单地初始化一个对中断63H 的调用 (类似于使用中断21H 调用 ),并且把“ Hello There”传送给上述TSR 程序# include # include # include void SetupPointers (void) ; void OutputString(char * ); # define STACKSIZE 4096 unsigned int near OldStackPtr; unsigned int near OldStackSeg; unsigned int _near MyStackOff ; unsigned int _near MyStackSeg; unsigned char_near MyStackSTACKSIZE; unsigned char far * MyStackPtr= (unsigned char_far * )MyStack; unsigned short AX, BX,CX, DX,ES; / * My interrupt handler * / void_interrupt_far_ 视频教程 cdecl NewCommV ector ( unsigned short es, unsigned short ds, unsigned short di, unsigned short si, unsigned short bp, unsigned short sp, unsigned short bx, unsigned short dx, unsigned short cx, unsigned short ax, unsigned short ip, unsigned short cs, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - unsigned short flags) ; / * Pointers to the previous interrupt handier * / void(_interrupt_far_cdecl * CommVector)(); union REGS regs; struet SREGS segregs ; # define COMM_VECTOR 0 x63 / * Software interrupt vector * / / * This is where the data gets passed into the TSR * / char_far * eallerBufPtr; char localBuffer255; / * Limit of 255 bytes to transfer * / char_far * localBufPtr=(ehar_far * )loealBuffer; unsigned int ProgSize= 276; / * Size of the program in paragraphs * / void main(int argc,char * * argv) int i, idx; / * Set up all far pointers * / SetupPointers () ; / * Use a cheap hack to see if the TSR is already loaded tf it is, exit,doing nothing * / comm_veetor =_dos_getvect (COMM_VECTOR) ; if(long)eomm_vector & 0 xFFFFL) = (long) NewCommV ector & OxFFFFL ) ) OutputString(Error :TSR appears to already be loaded. n); return ; / * If everythings set,then chain in the TSR * / _dos_setvect (COMM_VECTOR ,NewCommVector) ; / * Say we are loaded * / OutputString(TSR is now loaded at 0 x63n); / * Terminate, stay resident * / dos_keep (0, ProgSize ) ; / * Initializes all the pointers the program will use * / void Set upPointers ( ) int idx ; / * Save segment and offset of MyStackPtr for stack switching * / MyStackSeg = FP_SEG (MyStackPtr) ; MyStackOff = FP_OFF (MyStackPtr) ; / * Initialize my stack to hex 55 so I can see its footprint if I need to do debugging * / for (idx = 0 ;idx0; CX-) OutputString (localBufPtr) ; AX=1; /* show success */ break ; case 0 x30: /* Unload stop processing interrupts * / _dos_setvect (COMM_VECTOR ,comm_vector) ; AX=2; /* show success */ break ; default : OutputString ( Unknown commandrn ) ; AX= 0 xFFFF; / * unknown command-1 * / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - break ; / * Switch back to the callers stack * / asm cli ;turn off interrupts mov ss,OldStackSeg ;reset old stack segment mov sp,OldStackPtr ;reset old stack pointer sti ;back on again ax=AX; /* use return value from switch() */ / * avoids calling DOS to print characters * / void OutputString(char * str) int i ; regs. h. ah = 0 x0E ; regs. x. bx = 0 ; for(i=strlen(str) ; i0; i-,str+) regs. h. al= * str; int86 (0 xl0, ?s, ?s) ; 上述程序是这两个程序中的TSR 程序。 这个程序中有一个NewCommVector() 函数, 它被安装在中断 63H(63H 通常是一个可用的向量)处作为中断服务程序。当它被安装好后, 它就可以接收命令了。switch 语句用来处理输入的命令,并作出相应的反应。笔者随意选择了0 x1O 和 0 x30 来代表这样两条命令:“从 ES:BX 处复制数据,并打印到屏幕上,CX 中的数值为打印次数” ; “脱离中断63H,并停止接收命令” 。下面是第二个程序向中断63H 发送命令的程序(注重它必须在Large 模式下编译 )。# include # include # define COMM VECTOR 0 x63 union REGS regs; struct SREGS segregs ; char buffer80; char _far * buf=(char_far *)buffer; main (int argc,char * * argv) intcnt; cnt = (argo= =1 ? 1:atoi(argv1) ; strcpy (bur, Hello Therern ) ; regs. x. ax= 0 x10; regs. x. cx=cnt ; regs. x. bx=FP OFF(buf); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心

    注意事项

    本文(2022年C语言编程技巧 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开