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

下載本文檔

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

文檔簡(jiǎn)介

1、C語(yǔ)言編程常見問(wèn)題解答之常用函數(shù)的包含文件(1)- 函數(shù) 包含 類別 功能_atold math.h 數(shù)學(xué)子程序 把字符串轉(zhuǎn)換為浮點(diǎn)數(shù)_beginthread process.h 進(jìn)程控制子程序 啟動(dòng)執(zhí)行一個(gè)新線程_bios_disk bios.h 接口子程序 輸出BIOS磁盤驅(qū)動(dòng)器服務(wù)_bios_equiplist bios.h 接口子程序 檢查設(shè)備_bios_keybrd bios.h 接口子程序 直接使用BIOS的鍵盤接口_bios_memsize biosd.h 存儲(chǔ)子程序 返回內(nèi)存大小_bios_printer bios.h 接口子程序 直接調(diào)用BIOS服務(wù)進(jìn)行打印機(jī)I/O_bios

2、_timeofday bios.h 時(shí)間和日期子程序 讀取或設(shè)置BIOS時(shí)鐘_biosserialcom bios.h 接口子程序 進(jìn)行串行I/O_c_exit process.h 進(jìn)程控制子程序 不終止程序執(zhí)行如同_exit的清除_cexit process.h 進(jìn)程控制子程序 不終止程序執(zhí)行如同_exit的清除_chdrive direct.h 目錄控制子程序 設(shè)置當(dāng)前驅(qū)動(dòng)器_chian_intr dos.h 接口子程序_chmode io.h 輸入輸出子程序 改變文件的存取權(quán)限_clear87 float.h 數(shù)學(xué)子程序 清除浮點(diǎn)狀態(tài)字_close io.h 輸入輸出子程序 關(guān)閉文件(3

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

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

5、 取得中斷向量_dos_keep dos.h 接口子程序_dos_open dos.h 輸入輸出子程序 打開一個(gè)文件用于讀和寫_dos_read dos.h 輸入輸出子程序 從文件讀_dos_setblock dos.h 存儲(chǔ)子程序_dos_setdate dos.h 時(shí)間和日期子程序 設(shè)置系統(tǒng)日期_dos_setdrive dos.h 目錄控制子程序 設(shè)置當(dāng)前驅(qū)動(dòng)器號(hào)_dos_setfileatt dos.h 輸入輸出子程序 設(shè)置文件屬性_dos_setfitme dos.h 輸入輸出子程序 設(shè)置文件時(shí)間_dos_settime dos.h 時(shí)間和日期子程序 設(shè)置系統(tǒng)時(shí)間_dos_setve

6、ct dos.h 接口子程序 設(shè)置中斷向量_dos_write dos.h 輸入輸出子程序 寫向文件_enable dos.h 接口子程序 開硬件中斷_exit process.h 進(jìn)程控制子程序 終止程序_fpresent float.h 數(shù)學(xué)子程序 重新初始化浮點(diǎn)數(shù)學(xué)包_fsopen stdio.h 輸入輸出子程序_fullpath stdlib.h 目錄控制子程序 把相對(duì)路徑名轉(zhuǎn)換為絕對(duì)路徑名_getdcwd direct.h 目錄控制子程序 取得指定驅(qū)動(dòng)器的當(dāng)前目錄_getdrive direct.h 目錄控制子程序 取得當(dāng)前驅(qū)動(dòng)器號(hào)_graphfreemem graphics.h 圖

7、形子程序 可修改的圖形內(nèi)存釋放函數(shù)_graphgetmem graphics.h 圖形子程序 可修改的圖形內(nèi)存分配函數(shù)_harderr dos.h 接口子程序 建立一個(gè)硬件錯(cuò)誤處理程序_hardresume dos.h 接口子程序 硬件錯(cuò)誤處理函數(shù)_hardretn dos.h 接口子程序 硬件錯(cuò)誤處理函數(shù)_heapadd alloc.h 添加一個(gè)塊到堆上_heapmin malloc.h 釋放無(wú)用的堆區(qū)域_hea視頻教程pset malloc.h 用一個(gè)常量值填充堆上的自由塊_initEasyWin io.h 初始化Ease windows_lrotl stdlib.h 數(shù)學(xué)子程序 將無(wú)符號(hào)

8、長(zhǎng)整型數(shù)向左循環(huán)移位_lrotr stdlib.h 數(shù)學(xué)子程序 將無(wú)符號(hào)長(zhǎng)整型數(shù)向右循環(huán)移位_makeepath stdlib.h 目錄控制子程序 生成一個(gè)路徑_matherrl math.h 診斷子程序 用戶可修改的數(shù)學(xué)錯(cuò)誤處理程序_matherrl math.h 數(shù)學(xué)子程序 用戶可修改的數(shù)學(xué)錯(cuò)誤處理程序_open io.h 輸入輸出子程序 打開一個(gè)文件進(jìn)行讀和寫_OvrInitEms dos.h 初始化復(fù)蓋治理程序用于交換EMS內(nèi)存_OvrInitExt dos.h 初始化復(fù)蓋治理程序用于交換EXT內(nèi)存_pclose stdio.h 等待一個(gè)管道命令結(jié)束_popen stdio.h 創(chuàng)建一

9、個(gè)子命令處理程序管道_read io.h 輸入輸出子程序 讀文件(3。1以下版本)_rotl stdlib.h 嵌入子程序 將一個(gè)無(wú)符號(hào)整數(shù)左循環(huán)移位_rotl stdlib.h 數(shù)學(xué)子程序 把一個(gè)無(wú)符號(hào)整數(shù)左循環(huán)移位_rotr stdlib.h 嵌入子程序 將一個(gè)無(wú)符號(hào)整數(shù)向左循環(huán)移位_searchstr stdlib.h 為某文件查找某些目錄_setcursortype graphics.h 圖形子程序 選擇光標(biāo)類型_setcursortype conio.h 輸入輸出子程序 選擇光標(biāo)類型_setcursortype conio.h 文本窗口顯示子程 選擇光標(biāo)類型_splitpath st

10、dlib.h 目錄控制子程序 將一個(gè)全限定的路徑名分解各個(gè)成份_status87 float.h 數(shù)學(xué)子程序 取浮點(diǎn)狀態(tài)_strdate stdlib.h 轉(zhuǎn)換子程序 把當(dāng)前日期轉(zhuǎn)換成字符串_strerror string.h stdio 輸入輸出子程序 建立用戶定義的錯(cuò)誤信息_strtime stdlib.h 轉(zhuǎn)換子程序 轉(zhuǎn)換當(dāng)前日期為字符串_strtold stdlib.h 轉(zhuǎn)換子程序_strtold stdlib.h 數(shù)學(xué)子程序_tolower ctype.h 轉(zhuǎn)換子程序 把字符轉(zhuǎn)換成小寫字母_write io.h 輸入輸出子程序 寫文件abort process.h 進(jìn)程控制子程序 異

11、常終止一進(jìn)程abs stdlib.h compl 數(shù)學(xué)子程序 返回整數(shù)的絕對(duì)值absl math.h 數(shù)學(xué)子程序 計(jì)算復(fù)數(shù)的模absread dos.h 接口子程序 讀磁盤的絕對(duì)扇區(qū)abswrite dos.h 接口子程序 寫磁盤的絕對(duì)扇區(qū)access io.h 輸入輸出子程序 確定文件的存取權(quán)限acos math.h complex 數(shù)學(xué)子程序 計(jì)算反余弦值acosl math.h 數(shù)學(xué)子程序 計(jì)算反余弦值alloca malloc.h 存儲(chǔ)子程序 分配臨時(shí)堆??臻gallocm dos.h 存儲(chǔ)子程序 分配DOS內(nèi)存arc graphics.h 圖形子程序 畫園弧arg complex.h

12、數(shù)學(xué)子程序 求復(fù)平面中一個(gè)復(fù)數(shù)的弧度asctime time.h 時(shí)間和日期子程序 轉(zhuǎn)換日期和時(shí)間為對(duì)應(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é)子程序 計(jì)算y/x的反正切值atan2l math.h 數(shù)學(xué)子程序 計(jì)算y/x的反正切值atof stdlib.h 轉(zhuǎn)換子程序 將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)at of math.h stdlib. 數(shù)學(xué)子程序 將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)atoi stdlib.h 轉(zhuǎn)換子程序 將字符串

13、轉(zhuǎn)換為整數(shù)atoi stdlib.h 數(shù)學(xué)子程序 把字符串轉(zhuǎn)換成整型數(shù)atol stdlib.h 轉(zhuǎn)換子程序 將字銜串轉(zhuǎn)換成長(zhǎng)整型數(shù)atol stdlib.h 數(shù)學(xué)子程序 抬字符串轉(zhuǎn)換為長(zhǎng)整型bar graphics.h 圖形子程序 畫二維條形圖bar3d graphics.h 圖形子程序 畫一個(gè)三維條形圖bcd bcd.h 數(shù)學(xué)子程序 把一個(gè)數(shù)轉(zhuǎn)換為相對(duì)應(yīng)的BCD碼bdos dos.h 接口子程序 DOS系統(tǒng)調(diào)用bdosptr dos.h 接口子程序 DOS系統(tǒng)調(diào)用bioscom bios.h 接口子程序 I/O通訊biosdisk bios.h 接口子程序 調(diào)用BIOS磁盤驅(qū)動(dòng)程序bios

14、eqiplist 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時(shí)鐘brk alloc.h 存儲(chǔ)子程序 改變數(shù)據(jù)段內(nèi)存分配cabs math.h 數(shù)學(xué)子程序 計(jì)算復(fù)數(shù)的模calloc alloc.h stdlib 存儲(chǔ)子程序 分配內(nèi)存ceil math.h 數(shù)學(xué)子程序 舍入ceill math.h 數(shù)學(xué)子程序 舍入cgets conio.h 輸入

15、輸出子程序 讀字符串chdir dir.h 目錄控制子程序 改變當(dāng)前目錄chmod io.h 輸入輸出子程序 改變文件存取權(quán)限chsize io.h 輸入輸出子程序 修改文件長(zhǎng)度circle graphics.h 圖形子程序 畫園cleardevice graphics.h 圖形子程序 清圖形屏幕clearerr io.h 輸入輸出子程序 復(fù)位錯(cuò)誤標(biāo)志clearviewport graphics.h 圖形子程序 清除當(dāng)前圖形窗口close io.h 輸入輸出子程序 關(guān)閉文件closedir direct.h 目錄控制子程序 關(guān)閉目錄流closegraph graphics.h 圖形子程序 關(guān)閉

16、圖形系統(tǒng)clreol conio.h 文本窗口顯示子程 清除從當(dāng)前光標(biāo)位置到行尾的字符clrscr conio.h 文本窗口顯示子程 清除文本窗口,并把光標(biāo)放在左上角complex complex.h 數(shù)學(xué)子程序 創(chuàng)建復(fù)數(shù)conj complex.h 數(shù)學(xué)子程序 求復(fù)數(shù)的共軛復(fù)數(shù)coreleft alloc.h stdlib 存儲(chǔ)子程序 返順未使用的內(nèi)存大小cos math.h complex 數(shù)學(xué)子程序 計(jì)算余弦值cosh math.h complex 數(shù)學(xué)子程序 計(jì)算雙曲余弦值coshl math.h 數(shù)學(xué)子程序 計(jì)算雙曲余弦值cosl math.h 數(shù)學(xué)子程序 計(jì)算余弦值country

17、dos.h 接口子程序 讀取與特定國(guó)家有關(guān)的格式cprintf conio.h 輸入輸出子程序 格式化并輸出數(shù)據(jù)到屏幕cputs conio.h 輸入輸出子程序 輸出一字符串到屏幕creat io.h 輸入輸出子程序 創(chuàng)建一個(gè)新文件或重寫一個(gè)已存在的文件creatnew io.h 輸入輸出子程序 創(chuàng)建新文件creattemp io.h 輸入輸出子程序 創(chuàng)建一個(gè)文件名唯一的文件cscanf conio.h 輸入輸出子程序 從控制臺(tái)執(zhí)行格式化輸入ctime time.h 時(shí)間和日期子程序 把日期和時(shí)間轉(zhuǎn)化為對(duì)應(yīng)的字符串ctrlbrk dos.h 接口子程序 設(shè)置CTRL-BREAK處理程序dela

18、y dos.h 雜類子程序 暫停DOSdelline conio.h 文本窗口顯示子程 在文本窗口中刪去一行detectgraph graphics.h 圖形子程序 檢測(cè)硬件并確定使用何種圖形驅(qū)運(yùn)程序和圖形difftime time.h 時(shí)間和日期子程序 計(jì)算二個(gè)時(shí)刻的時(shí)間差disable dos.h 接口子程序 屏蔽中斷css.shtml target=_blank title = div視頻教程div math.h 數(shù)學(xué)子程序 將二個(gè)整數(shù)相除,返回商和余數(shù)dosexterr dos.h 接口子程序 獲取擴(kuò)展錯(cuò)誤信息dostounix dos.h 時(shí)間和日期子程序 把日期和時(shí)間轉(zhuǎn)換成UNIX

19、格式drawpoly graphics.h 圖形子程序 繪制多邊形dup io.h 輸入輸出子程序 復(fù)制文件句柄dup2 io.h 輸入輸出子程序 將一個(gè)文件句柄復(fù)制到一個(gè)已有的文件句柄ecvt stdlib.h 轉(zhuǎn)換子程序 把浮點(diǎn)數(shù)轉(zhuǎn)換成字符串ecvt stdlib.h 數(shù)學(xué)子程序 把浮點(diǎn)數(shù)轉(zhuǎn)換為字符串elipse graphics.h 圖形子程序 繪制橢園enable dos.h 接口子程序 開硬件中斷eof io.h 輸入輸出子程序 檢測(cè)文件是否結(jié)束execle process.h 進(jìn)程控制子程序 裝入并運(yùn)行其它程序execlp process.h 進(jìn)程控制子程序 裝入并運(yùn)行其它程序ex

20、eclpe process.h 進(jìn)程控制子程序 裝入并運(yùn)行其它程序exect process.h 進(jìn)程控制子程序execv process.h 進(jìn)程控制子程序 裝入并運(yùn)行其它程序 本文章來(lái)自 21視頻教程網(wǎng) C語(yǔ)言編程常見問(wèn)題解答之常用函數(shù)的包含文件(1)_C語(yǔ)言程序設(shè)計(jì)教程 原文鏈接:/html/61353.shtmlC語(yǔ)言編程常見問(wèn)題解答之雜項(xiàng)(Miscellaneous)(2)- 請(qǐng)參見: 2012怎樣把數(shù)據(jù)從一個(gè)程序傳遞到另一個(gè)程序? 2017可以使熱啟動(dòng)(Ctrl+Alt+Delete)失效嗎? 2110什么

21、是動(dòng)態(tài)連接? 209 為什么要使用靜態(tài)變量 靜態(tài)變量作為一個(gè)局部變量是很合適的,它在函數(shù)退出后不會(huì)失去其本身的值。例如,有一個(gè)要被調(diào)用很多次的函數(shù),它的一部分功能就是計(jì)算自己被調(diào)用的次數(shù)。你不能用一個(gè)簡(jiǎn)單的局部變量來(lái)實(shí)現(xiàn)這部分功能,因?yàn)槊看芜M(jìn)入該函數(shù)時(shí),這個(gè)變量都沒(méi)有被初始化。假如把這個(gè)計(jì)數(shù)變量說(shuō)明為靜態(tài)的,那么它就會(huì)象一個(gè)全局變量那樣保留自己的當(dāng)前值。 那么為什么不直接使用一個(gè)全局變量呢?你可以使用一個(gè)全局變量,而且這樣做沒(méi)有錯(cuò)誤。問(wèn)題是使用了大量全局變量的程序維護(hù)起來(lái)很麻煩,尤其是有許多函數(shù)都各自訪問(wèn)一個(gè)全局變量的程序。再說(shuō)一遍,這樣做沒(méi)有錯(cuò)誤,這只是一個(gè)程序設(shè)計(jì)和可讀性是否好的問(wèn)題。假如

22、你把這樣的變量說(shuō)明為靜態(tài)的,你就可以提醒自己(或者其它可能讀你的程序的人)它是局部變量,但要象全局變量那樣被處理(保留自己的值)。假如你把它說(shuō)明為全局的,那么讀這個(gè)程序的人一定會(huì)認(rèn)為有很多地方要引用它,盡管實(shí)際上并不是這樣。 總而言之,當(dāng)你需要一個(gè)能保持自己的值的局部變量時(shí),使用靜態(tài)變量是一種好的編程習(xí)慣。 請(qǐng)參見: 217可以頭文件中說(shuō)明static變量嗎? 2010 怎樣在一個(gè)程序后面運(yùn)行另一個(gè)程序? 顯然,在一個(gè)程序后面運(yùn)行另一個(gè)程序的最簡(jiǎn)單的辦法是把它們依次列入一個(gè)批處理文件中,在執(zhí)行該批處理文件時(shí),其中所列的程序就會(huì)依次運(yùn)行。然而,這是一種人們已經(jīng)知道的辦法。 在c或DOS中,都沒(méi)有

23、一種特定的方法來(lái)完成“在一個(gè)程序結(jié)束后運(yùn)行另一個(gè)程序”這樣一種函數(shù)調(diào)用。然而,c提供了兩組函數(shù),它們答應(yīng)一個(gè)程序隨時(shí)可以運(yùn)行另一個(gè)程序,而后者的運(yùn)行將結(jié)束前者的運(yùn)行。假如你將這樣的一個(gè)函數(shù)調(diào)用放到第一個(gè)程序的末尾,你就能達(dá)到上述目的。C所提供的這兩組函數(shù)實(shí)際上是由exec()和spawn()所代表的兩個(gè)函數(shù)族,其中的每一個(gè)函數(shù)都具有一種區(qū)別于同族其它函數(shù)的功能。exec()函數(shù)族包括這樣一些成員:execl(),execle(),execlp(),execlpe(),execv(),execve(),execvp()和execvpe()。下面列出了這此函數(shù)名中的e,l,p和v等后綴的含義: e

24、 明確地把一個(gè)指向環(huán)境參數(shù)的指針數(shù)組傳遞給子進(jìn)程 l 把命令參數(shù)逐個(gè)傳遞給要執(zhí)行的程序 p 通過(guò)環(huán)境變量PATH找到要執(zhí)行的文件 v 把命令行參數(shù)以一個(gè)指針數(shù)組的形式傳遞給要執(zhí)行的程序 在程序中選用哪一個(gè)函數(shù)完全取決于你以及要執(zhí)行的程序的需要。下例中的程序調(diào)用了其參數(shù)由命令行指定的另一個(gè)程序:# include # include char * envString = / * environment for the app * / COMM VECTOR=0x63, /* communications vector */ PARENT=LAUNCH. EXE, / * name of this

25、 app * / EXEC=EDIT. COM, / * name of app to exec * / NULL ; / * must be NULL-terminated * /voidmain(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) ; 上面這個(gè)短小的

26、例子調(diào)用_execvpe()來(lái)執(zhí)行DOS的文件編輯器EDITCOM,EDIT程序的參數(shù)來(lái)自該例的命令行。在調(diào)用execvpe()函數(shù)后,上例中的程序就結(jié)束了;當(dāng)EDIT程序退出時(shí),你將返回到DOS提示符。假如printf()語(yǔ)句的打印內(nèi)容顯示在屏幕上,則說(shuō)明_execvpe()函數(shù)調(diào)用出了問(wèn)題,因?yàn)榧偃缢{(diào)用成功,就不會(huì)有上述結(jié)果。注重,上例所提供的EDIT.COM的環(huán)境變量是沒(méi)有任何意義的,然而,假如上例要執(zhí)行一個(gè)需要環(huán)境變量的程序,那么所提供的環(huán)境變量就能供該程序使用了。 用spawn()函數(shù)同樣可以完成上例所做的工作。spawn()函數(shù)族包括這樣一些成員: spawnl(),spawnl

27、e()。spawnlp(),spawnlpe(),spawnv(),spawnve(),spawnvp()和spawnvpe()。這些函數(shù)名中的e,l,p和v等后綴的含義與exec()族函數(shù)名中的相同。實(shí)際上,spawn()函數(shù)族與exec()函數(shù)族基本相同,只不過(guò)有一點(diǎn)小小的差別spawn()函數(shù)既可以在結(jié)束原來(lái)的程序后啟動(dòng)另一個(gè)程序,也可以啟動(dòng)另一個(gè)程序并在該程序結(jié)束后返回到原來(lái)的程序。spawn()函數(shù)的參數(shù)與exec()函數(shù)的基本相同,只不過(guò)需要增加一個(gè)參數(shù)一你必須用_P_OVERLAY(結(jié)束原來(lái)的程序)或_P_WAIT(結(jié)束后返回到原來(lái)的程序)作為spawn()函數(shù)的第一個(gè)參數(shù)。下例

28、用spawn()函數(shù)完成了與前面的例子相同的工作:# 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 *a

29、rgv) / * 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 ); 這里唯一的區(qū)別是exec”變?yōu)閟pawn,并且增加了模式(mode)參數(shù)。spawn()函數(shù)有覆蓋和等待兩種相對(duì)立的功能,它使你可以在spawn()運(yùn)行期間做出是等待還是離開的決定。實(shí)現(xiàn)上,P_WAIT參數(shù)回答了下一個(gè)問(wèn)題。 請(qǐng)

30、參見: 2011 怎樣在一個(gè)程序執(zhí)行期間運(yùn)行另一個(gè)程序? 2011 怎樣在一個(gè)程序執(zhí)行期間運(yùn)行另一個(gè)程序? 正如你在2010的例子中看到的那樣,spawn()函數(shù)族答應(yīng)在一個(gè)程序中啟動(dòng)另一個(gè)程序,并在后者結(jié)束后返回到前者之中。有關(guān)spawn()函數(shù)的背景知識(shí)和例子(你只需把其中的_P_OVERLAY改為_P_WAIT) 請(qǐng)參見2010。 然而,還有另外一種方法可以完成這項(xiàng)工作,即使用system()函數(shù)。system()函數(shù)與exec()或spawn()函數(shù)相似,但也不有同之處。除了掛起(而不是結(jié)束)當(dāng)前程序去執(zhí)行新程序外,system()還要啟動(dòng)COMMANDCOM命令翻譯程序(或者其它任何

31、運(yùn)行在你的計(jì)算機(jī)上的命令翻譯程序)。假如它找不到COMMANDCOM或類似的程序,那么它就不會(huì)去執(zhí)行所要求的程序(這一點(diǎn)與exec()或spawn()函數(shù)不同)。下例是調(diào)用EDITCOM打開一個(gè)文件的另一個(gè)程 序版本,其中的文件名也來(lái)自該例的命令行:# 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, (ar

32、gv1 = NULL?HELLO :argyll3) ) ; / * Call the one with variable arguments and an environment * / ret = sytem (argStr) ; printf(system() returned %dn ,ret) ; 與2010中的例子一樣(使用_P_WAIT),在system()調(diào)用后面的print()語(yǔ)句會(huì)被執(zhí)行,因?yàn)樵瓉?lái)的程序只是被掛起而不是被終止。在每一種情況下,system()都會(huì)返回一個(gè)表示是否成功地運(yùn)行了所指定的程序的值,而不會(huì)返回所指定的程序的返回值。 請(qǐng)參見: 2010怎樣在一個(gè)程序后

33、面運(yùn)行另一個(gè)程序? 2012 怎樣把數(shù)據(jù)從一個(gè)程序傳給另一個(gè)程序? 有好幾種基本的方法可以完成這項(xiàng)任務(wù)-你可以通過(guò)文件或內(nèi)存來(lái)傳遞這些數(shù)據(jù)。這些方法的步驟都相當(dāng)簡(jiǎn)潔:首先,定義在何處存放數(shù)據(jù),如何獲取數(shù)據(jù),以及如何通知另一個(gè)程序來(lái)獲取或設(shè)置數(shù)據(jù);然后,你就可以獲取或設(shè)置數(shù)據(jù)了,盡管使用文件的技術(shù)定義和實(shí)現(xiàn)起來(lái)都比較簡(jiǎn)單,但它的速度往往比較慢(并且輕易引起混亂)。因此,這里重點(diǎn)討論內(nèi)存數(shù)據(jù)轉(zhuǎn)移技術(shù)。下面將依次具體地分析這一過(guò)程的每一個(gè)環(huán)節(jié): 定義在何處存放數(shù)據(jù)。當(dāng)你編寫要共享數(shù)據(jù)的兩個(gè)程序時(shí),你應(yīng)該讓程序知道要訪問(wèn)的數(shù)據(jù)存放在何處。這個(gè)環(huán)節(jié)同樣有幾種實(shí)現(xiàn)方法:你可以在一個(gè)(或每個(gè))程序中建立一個(gè)

34、固定的內(nèi)部緩沖區(qū),并在兩個(gè)程序之間傳遞指向這個(gè)緩沖區(qū)的指針;你也可以為數(shù)據(jù)分配動(dòng)態(tài)內(nèi)存,并在兩個(gè)程序之間傳遞指向該數(shù)據(jù)的指針;假如要傳遞的數(shù)據(jù)很小,你還可以通過(guò)CPU的通用寄存器來(lái)傳遞數(shù)據(jù)(這種可能性很小,因?yàn)閤86結(jié)構(gòu)的寄存器很少)。分配動(dòng)態(tài)內(nèi)存是最靈活和模塊性最強(qiáng)的方法。 定義獲取數(shù)據(jù)的方法。這個(gè)環(huán)節(jié)非常簡(jiǎn)潔你可以使用fmemcpy()或等價(jià)的內(nèi)存拷貝函數(shù)。顯然,在獲取和設(shè)置數(shù)據(jù)時(shí)都可以使用這個(gè)函數(shù)。 定義通知另一個(gè)程序的方法。因?yàn)镈OS并不是一個(gè)多任務(wù)操作系統(tǒng),所以其中一個(gè)(或兩個(gè))程序的一部分必須已經(jīng)駐留在內(nèi)存中,并且可以接受來(lái)自另一個(gè)程序的調(diào)用。同樣,這個(gè)環(huán)節(jié)也有幾種方法可供選擇:第

35、一個(gè)程序可以是一個(gè)列入CONFIGSYS中的驅(qū)動(dòng)程序,它在系統(tǒng)啟動(dòng)時(shí)就被裝入內(nèi)存;第一個(gè)程序也可以是一個(gè)TSR(終止并駐留)程序,在它退出時(shí)會(huì)把與第二個(gè)程序相互作用的那部分程序駐留在內(nèi)存中;此外,你也可以在第一個(gè)程序中利用system()或spawn()函數(shù)(見2011)來(lái)啟動(dòng)第二個(gè)程序。你可以根據(jù)需要選擇合適的方法。因?yàn)橛嘘P(guān)DOS驅(qū)動(dòng)程序的數(shù)據(jù)傳遞在DOS文檔中已經(jīng)有詳盡的描述,而有關(guān)system()和spawn()函數(shù)的內(nèi)容也已經(jīng)在前文中介紹過(guò),因此下面介紹TSR方法。 下面的例子給出了兩個(gè)程序:第一個(gè)程序是一個(gè)完整的TSR程序,但為了突出整個(gè)過(guò)程中的要害環(huán)節(jié),它寫得比較單薄(見2015中

36、的解釋)。這個(gè)TSR程序先是安裝了一個(gè)中斷63H的中斷服務(wù)程序,然后調(diào)用終止并駐留退出函數(shù),在執(zhí)行這個(gè)TSR程序后,執(zhí)行下文給出的另一個(gè)程序。這個(gè)程序只是簡(jiǎn)單地初始化一個(gè)對(duì)中斷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 OldStackSe

37、g;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 NewCommVector ( unsigned short es, unsigned short

38、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, unsigned short flags) ;/ * Pointers to the previous interrupt handier * /void(_interrupt_far_cdecl * CommV

39、ector)();union REGS regs;struet SREGS segregs ;# define COMM_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

40、int ProgSize= 276; / * Size of the program in paragraphs * /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 ; / * If everythings set,then chain in the TSR * / _dos_setvect (COMM_VECTOR ,NewCommVector) ; / * Say we are loaded * / OutputString(TSR is now loaded at 0x63n); /

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論