C語言編程技巧Word版_第1頁
C語言編程技巧Word版_第2頁
C語言編程技巧Word版_第3頁
C語言編程技巧Word版_第4頁
C語言編程技巧Word版_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!C語言編程常見問題解答之常用函數(shù)的包含文件(1)- 函數(shù) 包含 類別 功能_atold math.h 數(shù)學(xué)子程序 把字符串轉(zhuǎn)換為浮點數(shù)_beginthread process.h 進程控制子程序 啟動執(zhí)行一個新線程_bios_disk bios.h 接口子程序 輸出BIOS磁盤驅(qū)動器服務(wù)_bios_equiplist bios.h 接口子程序 檢查設(shè)備_bios_keybrd bios.h 接口子程序 直接使用BIOS的鍵盤接口_bios_memsize biosd.h 存儲子程序 返回內(nèi)存大小_bios_printer bios.h 接口

2、子程序 直接調(diào)用BIOS服務(wù)進行打印機I/O_bios_timeofday bios.h 時間和日期子程序 讀取或設(shè)置BIOS時鐘_biosserialcom bios.h 接口子程序 進行串行I/O_c_exit process.h 進程控制子程序 不終止程序執(zhí)行如同_exit的清除_cexit process.h 進程控制子程序 不終止程序執(zhí)行如同_exit的清除_chdrive direct.h 目錄控制子程序 設(shè)置當前驅(qū)動器_chian_intr dos.h 接口子程序_chmode io.h 輸入輸出子程序 改變文件的存取權(quán)限_clear87 float.h 數(shù)學(xué)子程序 清除浮點狀態(tài)

3、字_close io.h 輸入輸出子程序 關(guān)閉文件(3。1)以下版本_control87 float.h 數(shù)學(xué)子程序 處理浮點控制字_creat io.h 輸入輸出子程序 創(chuàng)建一個新文件或重寫一個已存在的文件_disable dos.h 接口子程序 屏蔽中斷_dos_allocmem dos.h 存儲子程序_dos_close dos.h 輸入輸出子程序 關(guān)閉一個文件_dos_craete dos.h 輸入輸出子程序 創(chuàng)建一個新文件或重寫一個已存在的文件_dos_createnew dos.h 輸入輸出子程序 創(chuàng)建一個新文件_dos_findfirst dos.h 目錄控制子程序 搜索一個磁盤

4、目錄_dos_findnext dos.h 目錄控制子程序 繼續(xù)_dos_findfirst的搜索_dos_freemem dos.h 存儲子程序_dos_getdate dos.h 時間和日期子程序 取得和設(shè)置系統(tǒng)日期_dos_getdiskfre dos.h 目錄控制子程序 取得磁盤空閑空間_dos_getdrive dos.h 目錄控制子程序 取得和設(shè)置當前驅(qū)動器號_dos_getfileatt dos.h 輸入輸出子程序 取得和設(shè)置文件屬性_dos_getftime dos.h 輸入輸出子程序 取得和設(shè)置文件日期和時間_dos_gettime dos.h 時間和日期子程序 取得和設(shè)置系

5、統(tǒng)時間_dos_getvect dos.h 接口子程序 取得中斷向量_dos_keep dos.h 接口子程序_dos_open dos.h 輸入輸出子程序 打開一個文件用于讀和寫_dos_read dos.h 輸入輸出子程序 從文件讀_dos_setblock dos.h 存儲子程序_dos_setdate dos.h 時間和日期子程序 設(shè)置系統(tǒng)日期_dos_setdrive dos.h 目錄控制子程序 設(shè)置當前驅(qū)動器號_dos_setfileatt dos.h 輸入輸出子程序 設(shè)置文件屬性傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!_dos_setfitme dos.h 輸入輸出

6、子程序 設(shè)置文件時間_dos_settime dos.h 時間和日期子程序 設(shè)置系統(tǒng)時間_dos_setvect dos.h 接口子程序 設(shè)置中斷向量_dos_write dos.h 輸入輸出子程序 寫向文件_enable dos.h 接口子程序 開硬件中斷_exit process.h 進程控制子程序 終止程序_fpresent float.h 數(shù)學(xué)子程序 重新初始化浮點數(shù)學(xué)包_fsopen stdio.h 輸入輸出子程序_fullpath stdlib.h 目錄控制子程序 把相對路徑名轉(zhuǎn)換為絕對路徑名_getdcwd direct.h 目錄控制子程序 取得指定驅(qū)動器的當前目錄_getdri

7、ve direct.h 目錄控制子程序 取得當前驅(qū)動器號_graphfreemem graphics.h 圖形子程序 可修改的圖形內(nèi)存釋放函數(shù)_graphgetmem graphics.h 圖形子程序 可修改的圖形內(nèi)存分配函數(shù)_harderr dos.h 接口子程序 建立一個硬件錯誤處理程序_hardresume dos.h 接口子程序 硬件錯誤處理函數(shù)_hardretn dos.h 接口子程序 硬件錯誤處理函數(shù)_heapadd alloc.h 添加一個塊到堆上_heapmin malloc.h 釋放無用的堆區(qū)域_hea視頻教程pset malloc.h 用一個常量值填充堆上的自由塊_init

8、EasyWin io.h 初始化Ease windows_lrotl stdlib.h 數(shù)學(xué)子程序 將無符號長整型數(shù)向左循環(huán)移位_lrotr stdlib.h 數(shù)學(xué)子程序 將無符號長整型數(shù)向右循環(huán)移位_makeepath stdlib.h 目錄控制子程序 生成一個路徑_matherrl math.h 診斷子程序 用戶可修改的數(shù)學(xué)錯誤處理程序_matherrl math.h 數(shù)學(xué)子程序 用戶可修改的數(shù)學(xué)錯誤處理程序_open io.h 輸入輸出子程序 打開一個文件進行讀和寫_OvrInitEms dos.h 初始化復(fù)蓋治理程序用于交換EMS內(nèi)存_OvrInitExt dos.h 初始化復(fù)蓋治理程

9、序用于交換EXT內(nèi)存_pclose stdio.h 等待一個管道命令結(jié)束_popen stdio.h 創(chuàng)建一個子命令處理程序管道_read io.h 輸入輸出子程序 讀文件(3。1以下版本)_rotl stdlib.h 嵌入子程序 將一個無符號整數(shù)左循環(huán)移位_rotl stdlib.h 數(shù)學(xué)子程序 把一個無符號整數(shù)左循環(huán)移位_rotr stdlib.h 嵌入子程序 將一個無符號整數(shù)向左循環(huán)移位_searchstr stdlib.h 為某文件查找某些目錄_setcursortype graphics.h 圖形子程序 選擇光標類型_setcursortype conio.h 輸入輸出子程序 選擇光

10、標類型_setcursortype conio.h 文本窗口顯示子程 選擇光標類型_splitpath stdlib.h 目錄控制子程序 將一個全限定的路徑名分解各個成份_status87 float.h 數(shù)學(xué)子程序 取浮點狀態(tài)_strdate stdlib.h 轉(zhuǎn)換子程序 把當前日期轉(zhuǎn)換成字符串_strerror string.h stdio 輸入輸出子程序 建立用戶定義的錯誤信息_strtime stdlib.h 轉(zhuǎn)換子程序 轉(zhuǎn)換當前日期為字符串傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!_strtold stdlib.h 轉(zhuǎn)換子程序_strtold stdlib.h 數(shù)學(xué)子程序

11、_tolower ctype.h 轉(zhuǎn)換子程序 把字符轉(zhuǎn)換成小寫字母_write io.h 輸入輸出子程序 寫文件abort process.h 進程控制子程序 異常終止一進程abs stdlib.h compl 數(shù)學(xué)子程序 返回整數(shù)的絕對值absl math.h 數(shù)學(xué)子程序 計算復(fù)數(shù)的模absread dos.h 接口子程序 讀磁盤的絕對扇區(qū)abswrite dos.h 接口子程序 寫磁盤的絕對扇區(qū)access io.h 輸入輸出子程序 確定文件的存取權(quán)限acos math.h complex 數(shù)學(xué)子程序 計算反余弦值acosl math.h 數(shù)學(xué)子程序 計算反余弦值alloca malloc

12、.h 存儲子程序 分配臨時堆??臻gallocm dos.h 存儲子程序 分配DOS內(nèi)存arc graphics.h 圖形子程序 畫園弧arg complex.h 數(shù)學(xué)子程序 求復(fù)平面中一個復(fù)數(shù)的弧度asctime time.h 時間和日期子程序 轉(zhuǎn)換日期和時間為對應(yīng)的ASCII碼asin math.h complex 數(shù)學(xué)子程序 反正弦函數(shù)asinl math.h 數(shù)學(xué)子程序 反正弦函數(shù)assert assert.h 診斷子程序 條件終止函數(shù)atan2 math.h complex 數(shù)學(xué)子程序 計算y/x的反正切值atan2l math.h 數(shù)學(xué)子程序 計算y/x的反正切值atof stdli

13、b.h 轉(zhuǎn)換子程序 將字符串轉(zhuǎn)換為浮點數(shù)at of math.h stdlib. 數(shù)學(xué)子程序 將字符串轉(zhuǎn)換成浮點數(shù)atoi stdlib.h 轉(zhuǎn)換子程序 將字符串轉(zhuǎn)換為整數(shù)atoi stdlib.h 數(shù)學(xué)子程序 把字符串轉(zhuǎn)換成整型數(shù)atol stdlib.h 轉(zhuǎn)換子程序 將字銜串轉(zhuǎn)換成長整型數(shù)atol stdlib.h 數(shù)學(xué)子程序 抬字符串轉(zhuǎn)換為長整型bar graphics.h 圖形子程序 畫二維條形圖bar3d graphics.h 圖形子程序 畫一個三維條形圖bcd bcd.h 數(shù)學(xué)子程序 把一個數(shù)轉(zhuǎn)換為相對應(yīng)的BCD碼bdos dos.h 接口子程序 DOS系統(tǒng)調(diào)用bdosptr do

14、s.h 接口子程序 DOS系統(tǒng)調(diào)用bioscom bios.h 接口子程序 I/O通訊biosdisk bios.h 接口子程序 調(diào)用BIOS磁盤驅(qū)動程序bioseqiplist bios.h 接口子程序 檢查設(shè)備bioskey bios.h 接口子程序 調(diào)用BIOS的鍵盤接口biosmemory bios.h 接口子程序 返加內(nèi)存的大小biosprintf bios.h 接口子程序 調(diào)用BIOS的打印I/O接口biostime bios.h 接口子程序 讀取或設(shè)置BIOS時鐘brk alloc.h 存儲子程序 改變數(shù)據(jù)段內(nèi)存分配cabs math.h 數(shù)學(xué)子程序 計算復(fù)數(shù)的模calloc a

15、lloc.h stdlib 存儲子程序 分配內(nèi)存ceil math.h 數(shù)學(xué)子程序 舍入傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!ceill math.h 數(shù)學(xué)子程序 舍入cgets conio.h 輸入輸出子程序 讀字符串chdir dir.h 目錄控制子程序 改變當前目錄chmod io.h 輸入輸出子程序 改變文件存取權(quán)限chsize io.h 輸入輸出子程序 修改文件長度circle graphics.h 圖形子程序 畫園cleardevice graphics.h 圖形子程序 清圖形屏幕clearerr io.h 輸入輸出子程序 復(fù)位錯誤標志clearviewport g

16、raphics.h 圖形子程序 清除當前圖形窗口close io.h 輸入輸出子程序 關(guān)閉文件closedir direct.h 目錄控制子程序 關(guān)閉目錄流closegraph graphics.h 圖形子程序 關(guān)閉圖形系統(tǒng)clreol conio.h 文本窗口顯示子程 清除從當前光標位置到行尾的字符clrscr conio.h 文本窗口顯示子程 清除文本窗口,并把光標放在左上角complex complex.h 數(shù)學(xué)子程序 創(chuàng)建復(fù)數(shù)conj complex.h 數(shù)學(xué)子程序 求復(fù)數(shù)的共軛復(fù)數(shù)coreleft alloc.h stdlib 存儲子程序 返順未使用的內(nèi)存大小cos math.h c

17、omplex 數(shù)學(xué)子程序 計算余弦值cosh math.h complex 數(shù)學(xué)子程序 計算雙曲余弦值coshl math.h 數(shù)學(xué)子程序 計算雙曲余弦值cosl math.h 數(shù)學(xué)子程序 計算余弦值country dos.h 接口子程序 讀取與特定國家有關(guān)的格式cprintf conio.h 輸入輸出子程序 格式化并輸出數(shù)據(jù)到屏幕cputs conio.h 輸入輸出子程序 輸出一字符串到屏幕creat io.h 輸入輸出子程序 創(chuàng)建一個新文件或重寫一個已存在的文件creatnew io.h 輸入輸出子程序 創(chuàng)建新文件creattemp io.h 輸入輸出子程序 創(chuàng)建一個文件名唯一的文件csc

18、anf conio.h 輸入輸出子程序 從控制臺執(zhí)行格式化輸入ctime time.h 時間和日期子程序 把日期和時間轉(zhuǎn)化為對應(yīng)的字符串ctrlbrk dos.h 接口子程序 設(shè)置CTRL-BREAK處理程序delay dos.h 雜類子程序 暫停DOSdelline conio.h 文本窗口顯示子程 在文本窗口中刪去一行detectgraph graphics.h 圖形子程序 檢測硬件并確定使用何種圖形驅(qū)運程序和圖形difftime time.h 時間和日期子程序 計算二個時刻的時間差disable dos.h 接口子程序 屏蔽中斷css.shtml target=_blank title

19、= div視頻教程div math.h 數(shù)學(xué)子程序 將二個整數(shù)相除,返回商和余數(shù)dosexterr dos.h 接口子程序 獲取擴展錯誤信息dostounix dos.h 時間和日期子程序 把日期和時間轉(zhuǎn)換成UNIX格式drawpoly graphics.h 圖形子程序 繪制多邊形dup io.h 輸入輸出子程序 復(fù)制文件句柄dup2 io.h 輸入輸出子程序 將一個文件句柄復(fù)制到一個已有的文件句柄傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!ecvt stdlib.h 轉(zhuǎn)換子程序 把浮點數(shù)轉(zhuǎn)換成字符串ecvt stdlib.h 數(shù)學(xué)子程序 把浮點數(shù)轉(zhuǎn)換為字符串elipse graph

20、ics.h 圖形子程序 繪制橢園enable dos.h 接口子程序 開硬件中斷eof io.h 輸入輸出子程序 檢測文件是否結(jié)束execle process.h 進程控制子程序 裝入并運行其它程序execlp process.h 進程控制子程序 裝入并運行其它程序execlpe process.h 進程控制子程序 裝入并運行其它程序exect process.h 進程控制子程序execv process.h 進程控制子程序 裝入并運行其它程序 本文章來自 21視頻教程網(wǎng) C語言編程常見問題解答之常用函數(shù)的包含文件(1)_C語言程序設(shè)計教程 原文鏈接:http:

21、//html/61353.shtmlC語言編程常見問題解答之雜項(Miscellaneous)(2)- 請參見: 2012怎樣把數(shù)據(jù)從一個程序傳遞到另一個程序? 2017可以使熱啟動(Ctrl+Alt+Delete)失效嗎? 2110什么是動態(tài)連接? 209 為什么要使用靜態(tài)變量 靜態(tài)變量作為一個局部變量是很合適的,它在函數(shù)退出后不會失去其本身的值。例如,有一個要被調(diào)用很多次的函數(shù),它的一部分功能就是計算自己被調(diào)用的次數(shù)。你不能用一個簡單的局部變量來實現(xiàn)這部分功能,因為每次進入該函數(shù)時,這個變量都沒有被初始化。假如把這個計數(shù)變量說明為靜態(tài)的,那么它就會象一個全局

22、變量那樣保留自己的當前值。 那么為什么不直接使用一個全局變量呢?你可以使用一個全局變量,而且這樣做沒有錯誤。問題是使用了大量全局變量的程序維護起來很麻煩,尤其是有許多函數(shù)都各自訪問一個全局變量的程序。再說一遍,這樣做沒有錯誤,這只是一個程序設(shè)計和可讀性是否好的問題。假如你把這樣的變量說明為靜態(tài)的,你就可以提醒自己(或者其它可能讀你的程序的人)它是局部變量,但要象全局變量那樣被處理(保留自己的值)。假如你把它說明為全局的,那么讀這個程序的人一定會認為有很多地方要引用它,盡管實際上并不是這樣。 總而言之,當你需要一個能保持自己的值的局部變量時,使用靜態(tài)變量是一種好的編程習(xí)慣。 請參見: 217可以

23、頭文件中說明static變量嗎? 2010 怎樣在一個程序后面運行另一個程序? 顯然,在一個程序后面運行另一個程序的最簡單的辦法是把它們依次列入一個批處理文件中,在執(zhí)行該批處理文件時,其中所列的程序就會依次運行。然而,這是一種人們已經(jīng)知道的辦法。 在c或DOS中,都沒有一種特定的方法來完成“在一個程序結(jié)束后運行另一個程序”這樣一種函數(shù)調(diào)用。然而,c提供了兩組函數(shù),它們答應(yīng)一個程序隨時可以運行另一個程序,而后者的運行將結(jié)束前者的運行。假如你將這樣的一個函數(shù)調(diào)用放到第一個程序的末尾,你就能達到上述目的。C所提供的這兩組函數(shù)實際上是由exec()和spawn()所代表的兩個函數(shù)族,其中的每一個函數(shù)都

24、具有一種區(qū)別于同族其它函數(shù)的功能。exec()函數(shù)族包括這樣一些成員:execl(),execle(),execlp(),execlpe(),execv(),execve(),execvp()和execvpe()。下面列出了這此函數(shù)名中的e,l,p和v等后綴的含義:傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除! e 明確地把一個指向環(huán)境參數(shù)的指針數(shù)組傳遞給子進程 l 把命令參數(shù)逐個傳遞給要執(zhí)行的程序 p 通過環(huán)境變量PATH找到要執(zhí)行的文件 v 把命令行參數(shù)以一個指針數(shù)組的形式傳遞給要執(zhí)行的程序 在程序中選用哪一個函數(shù)完全取決于你以及要執(zhí)行的程序的需要。下例中的程序調(diào)用了其參數(shù)由命令行

25、指定的另一個程序:# include # include char * envString = / * environment for the app * / COMM VECTOR=0x63, /* communications vector */ PARENT=LAUNCH. EXE, / * name of this app * / EXEC=EDIT. COM, / * name of app to exec * / NULL ; / * must be NULL-terminated * /voidmain(int argc, char *argv) / * Call the one

26、 with variable argumets and an enviroffment * / _execvpe ( EDIT. COM, argv, envString ) ; printf(If you can read this sentence, the exec didnt happen!n) ; 上面這個短小的例子調(diào)用_execvpe()來執(zhí)行DOS的文件編輯器EDITCOM,EDIT程序的參數(shù)來自該例的命令行。在調(diào)用execvpe()函數(shù)后,上例中的程序就結(jié)束了;當EDIT程序退出時,你將返回到DOS提示符。假如printf()語句的打印內(nèi)容顯示在屏幕上,則說明_execvpe(

27、)函數(shù)調(diào)用出了問題,因為假如它調(diào)用成功,就不會有上述結(jié)果。注重,上例所提供的EDIT.COM的環(huán)境變量是沒有任何意義的,然而,假如上例要執(zhí)行一個需要環(huán)境變量的程序,那么所提供的環(huán)境變量就能供該程序使用了。 用spawn()函數(shù)同樣可以完成上例所做的工作。spawn()函數(shù)族包括這樣一些成員: spawnl(),spawnle()。spawnlp(),spawnlpe(),spawnv(),spawnve(),spawnvp()和spawnvpe()。這些函數(shù)名中的e,l,p和v等后綴的含義與exec()族函數(shù)名中的相同。實際上,spawn()函數(shù)族與exec()函數(shù)族基本相同,只不過有一點小小

28、的差別spawn()函數(shù)既可以在結(jié)束原來的程序后啟動另一個程序,也可以啟動另一個程序并在該程序結(jié)束后返回到原來的程序。spawn()函數(shù)的參數(shù)與exec()函數(shù)的基本相同,只不過需要增加一個參數(shù)一你必須用_P_OVERLAY(結(jié)束原來的程序)或_P_WAIT(結(jié)束后返回到原來的程序)作為spawn()函數(shù)的第一個參數(shù)。下例用spawn()函數(shù)完成了與前面的例子相同的工作:# include # include char * envString = / * environment for the app * / COMM VECTOR = 0x63, / * communications vec

29、tor * / PARENT=LAUNCH. EXE, / * name of this app * / EXEC=EDIT. COM , / * name of app to exec * / NULL ; / * must be NULL-terminated * /傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除!voidmain(int argc, char *argv) / * Call the one with variable argumets and an environment * / _spawnvpe (_P_OVERLAY, EDIT. COM, argv, env

30、String) ; printf(If you can read this sentence, the exec didnt happen!n ); 這里唯一的區(qū)別是exec”變?yōu)閟pawn,并且增加了模式(mode)參數(shù)。spawn()函數(shù)有覆蓋和等待兩種相對立的功能,它使你可以在spawn()運行期間做出是等待還是離開的決定。實現(xiàn)上,P_WAIT參數(shù)回答了下一個問題。 請參見: 2011 怎樣在一個程序執(zhí)行期間運行另一個程序? 2011 怎樣在一個程序執(zhí)行期間運行另一個程序? 正如你在2010的例子中看到的那樣,spawn()函數(shù)族答應(yīng)在一個程序中啟動另一個程序,并在后者結(jié)束后返回到前者之

31、中。有關(guān)spawn()函數(shù)的背景知識和例子(你只需把其中的_P_OVERLAY改為_P_WAIT) 請參見2010。 然而,還有另外一種方法可以完成這項工作,即使用system()函數(shù)。system()函數(shù)與exec()或spawn()函數(shù)相似,但也不有同之處。除了掛起(而不是結(jié)束)當前程序去執(zhí)行新程序外,system()還要啟動COMMANDCOM命令翻譯程序(或者其它任何運行在你的計算機上的命令翻譯程序)。假如它找不到COMMANDCOM或類似的程序,那么它就不會去執(zhí)行所要求的程序(這一點與exec()或spawn()函數(shù)不同)。下例是調(diào)用EDITCOM打開一個文件的另一個程 序版本,其中

32、的文件名也來自該例的命令行:# include # include # inclued char argStr255 ;voidmain(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 (arg

33、Str) ; printf(system() returned %dn ,ret) ; 與2010中的例子一樣(使用_P_WAIT),在system()調(diào)用后面的print()語句會被執(zhí)行,因為原來的程序只是被掛起而不是被終止。在每一種情況下,system()都會返回一個表示是否成功地運行了所指定的程序的值,而不會返回所指定的程序的返回值。 請參見: 2010怎樣在一個程序后面運行另一個程序?傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除! 2012 怎樣把數(shù)據(jù)從一個程序傳給另一個程序? 有好幾種基本的方法可以完成這項任務(wù)-你可以通過文件或內(nèi)存來傳遞這些數(shù)據(jù)。這些方法的步驟都相當簡潔:首

34、先,定義在何處存放數(shù)據(jù),如何獲取數(shù)據(jù),以及如何通知另一個程序來獲取或設(shè)置數(shù)據(jù);然后,你就可以獲取或設(shè)置數(shù)據(jù)了,盡管使用文件的技術(shù)定義和實現(xiàn)起來都比較簡單,但它的速度往往比較慢(并且輕易引起混亂)。因此,這里重點討論內(nèi)存數(shù)據(jù)轉(zhuǎn)移技術(shù)。下面將依次具體地分析這一過程的每一個環(huán)節(jié): 定義在何處存放數(shù)據(jù)。當你編寫要共享數(shù)據(jù)的兩個程序時,你應(yīng)該讓程序知道要訪問的數(shù)據(jù)存放在何處。這個環(huán)節(jié)同樣有幾種實現(xiàn)方法:你可以在一個(或每個)程序中建立一個固定的內(nèi)部緩沖區(qū),并在兩個程序之間傳遞指向這個緩沖區(qū)的指針;你也可以為數(shù)據(jù)分配動態(tài)內(nèi)存,并在兩個程序之間傳遞指向該數(shù)據(jù)的指針;假如要傳遞的數(shù)據(jù)很小,你還可以通過CPU的

35、通用寄存器來傳遞數(shù)據(jù)(這種可能性很小,因為x86結(jié)構(gòu)的寄存器很少)。分配動態(tài)內(nèi)存是最靈活和模塊性最強的方法。 定義獲取數(shù)據(jù)的方法。這個環(huán)節(jié)非常簡潔你可以使用fmemcpy()或等價的內(nèi)存拷貝函數(shù)。顯然,在獲取和設(shè)置數(shù)據(jù)時都可以使用這個函數(shù)。 定義通知另一個程序的方法。因為DOS并不是一個多任務(wù)操作系統(tǒng),所以其中一個(或兩個)程序的一部分必須已經(jīng)駐留在內(nèi)存中,并且可以接受來自另一個程序的調(diào)用。同樣,這個環(huán)節(jié)也有幾種方法可供選擇:第一個程序可以是一個列入CONFIGSYS中的驅(qū)動程序,它在系統(tǒng)啟動時就被裝入內(nèi)存;第一個程序也可以是一個TSR(終止并駐留)程序,在它退出時會把與第二個程序相互作用的那

36、部分程序駐留在內(nèi)存中;此外,你也可以在第一個程序中利用system()或spawn()函數(shù)(見2011)來啟動第二個程序。你可以根據(jù)需要選擇合適的方法。因為有關(guān)DOS驅(qū)動程序的數(shù)據(jù)傳遞在DOS文檔中已經(jīng)有詳盡的描述,而有關(guān)system()和spawn()函數(shù)的內(nèi)容也已經(jīng)在前文中介紹過,因此下面介紹TSR方法。 下面的例子給出了兩個程序:第一個程序是一個完整的TSR程序,但為了突出整個過程中的要害環(huán)節(jié),它寫得比較單薄(見2015中的解釋)。這個TSR程序先是安裝了一個中斷63H的中斷服務(wù)程序,然后調(diào)用終止并駐留退出函數(shù),在執(zhí)行這個TSR程序后,執(zhí)行下文給出的另一個程序。這個程序只是簡單地初始化一

37、個對中斷63H的調(diào)用(類似于使用中斷21H調(diào)用),并且把“Hello There”傳送給上述TSR程序# include # include # include void SetupPointers (void) ;void OutputString(char * );# define STACKSIZE 4096unsigned int near OldStackPtr;unsigned int near OldStackSeg;unsigned int _near MyStackOff ;unsigned int _near MyStackSeg;unsigned char_near My

38、StackSTACKSIZE;unsigned char far * MyStackPtr= (unsigned char_far * )MyStack;unsigned short AX, BX,CX, DX,ES;/ * My interrupt handler * /void_interrupt_far_視頻教程cdecl NewCommVector ( unsigned short es, unsigned short ds, unsigned short di, unsigned short si, unsigned short bp, unsigned short sp, unsi

39、gned short bx, unsigned short dx, unsigned short cx,傳播優(yōu)秀Word版文檔 ,希望對您有幫助,可雙擊去除! unsigned short ax, unsigned short ip, unsigned short cs, unsigned short flags) ;/ * Pointers to the previous interrupt handier * /void(_interrupt_far_cdecl * CommVector)();union REGS regs;struet SREGS segregs ;# define C

40、OMM_VECTOR 0x63 / * 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

41、* /voidmain(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 & 0xFFFFL) = (long) NewCommVector & OxFFFFL ) ) OutputString(Error :TSR appears to already be loaded. n); return ;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論