進(jìn)程通信 重定向

      網(wǎng)友投稿 628 2022-05-29

      進(jìn)程通信 重定向

      本篇將介紹輸入輸出的重定向問題,先來看一個(gè)小小的實(shí)例,設(shè)有一個(gè)程序,該程序的輸入輸出為標(biāo)準(zhǔn)輸入輸出即從鍵盤上輸入,輸出到屏幕。現(xiàn)在要重定向輸入法輸出,使程序從文件中讀取數(shù)據(jù),處理后輸出到文件。程序代碼如下(稱此程序?yàn)槭纠绦颍?/p>

      試給出幾種不同的實(shí)現(xiàn)方法,另外如果沒有程序代碼,只有可執(zhí)行文件,又應(yīng)該如何做了?

      實(shí)現(xiàn)方法一使用C語言的freopen()函數(shù)

      函數(shù)功能:重定向控制臺(tái)的輸入輸出

      函數(shù)原型:

      函數(shù)說明:

      第一個(gè)參數(shù)為文件指針(也可以用來指向標(biāo)準(zhǔn)輸入輸出)。

      第二個(gè)參數(shù)為打開方式,"w"表示寫,"r"表示讀,"a"表示追加。其它設(shè)置可以參考MSDN。

      第三個(gè)參數(shù)為FILE類型的指針,傳入stdin表示標(biāo)準(zhǔn)輸入,傳入stdout表示標(biāo)準(zhǔn)輸出。

      這樣用只要用簡(jiǎn)單一句freopen("infile.txt", "r", stdin);就可以使程序中的scanf()函數(shù)從文件中讀取數(shù)據(jù)作為輸入,同樣freopen("outfile.txt", "w", stdout);可以使程序中的printf()函數(shù)將輸出由標(biāo)準(zhǔn)輸出改成輸出到文件。現(xiàn)在有個(gè)問題,將程序的輸入輸出重定向到文件后,還能改回到標(biāo)準(zhǔn)輸入輸出嗎?答案是可以的,對(duì)第一個(gè)參數(shù)傳入"CON"這個(gè)字符串就可以了(linux為"/dev/console")。

      下面就給出修改后的代碼:

      } 運(yùn)行結(jié)果如下圖所示:

      可以看出該程序的輸出輸入已經(jīng)完成了重定向。

      實(shí)現(xiàn)方法2 使用C++的ifstream和ofstream類

      有些場(chǎng)合使用類來完成輸入輸出的重定向任務(wù)會(huì)更加方便和習(xí)慣一些。所幸C++中就有ifstream和ofstream這二個(gè)類來幫助我們完成這一任務(wù)。這個(gè)二類的詳細(xì)功能就不細(xì)說了。下面介紹下如何使用這二個(gè)類來重定向程序的輸入輸出(看的時(shí)候看慢點(diǎn)喔,不會(huì)會(huì)被很多類名給搞暈去^_^)。

      這二個(gè)類可以以讀的方式和寫的方法打開一個(gè)文件(ifstream的首字母i就表示in,而ofstream的首字母o就表示out),在iosfwd文件中找到:

      然后可以在fstream文件中找到basic_ifstream類是繼承于basic_istream類,basic_ofstream類是繼承于basic_ostream類。

      然后再來看看C++中大家平常使用的cin和cout,可以在iostream文件中找到cin和cout的定義,這二個(gè)實(shí)際是istream類型和ostream類型的變量:

      然后在iosfwd文件中可以找到:

      明顯cin和cout與ifstream類和ofstream類有著非常密切關(guān)系——cin是basic_istream類的變量,而ifstream則是basic_istream類的派生類。cout是basic_ostream類的變量,而ofstream則是basic_ostream類的派生類。

      有了這個(gè)后,猜測(cè)很可能會(huì)有某個(gè)成員函數(shù)能將它們聯(lián)系到一起,從而讓cin和cout由標(biāo)準(zhǔn)輸入輸出重定向到從文件中讀取,輸出到文件。事實(shí)上在basic_istream類實(shí)際是虛繼承于basic_ioso類,basic_ostream類實(shí)際是虛繼承于basic_ios類。這二個(gè)類都有個(gè)rdbuf()成員函數(shù),這個(gè)函數(shù)允許我們?cè)L問和修改類中一個(gè)類型為basic_streambuf類的成員變量。改動(dòng)這個(gè)變量就能重定向輸入輸出。因此對(duì)cin和cout調(diào)用這個(gè)rdbuf()函數(shù)并傳入ifstream和ofstream的rdbuf()就可以將控制臺(tái)的標(biāo)準(zhǔn)輸入輸出改成從文件中讀取和輸出到文件。

      OK,方法既然找到了,那下面就使用C++的方法來重定向輸入輸出:

      } 運(yùn)行結(jié)果如下圖所示:

      同樣,這個(gè)程序也完成了輸入輸出的重定向。

      本文轉(zhuǎn)載自異步社區(qū)

      軟件開發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Python使用Pyecharts統(tǒng)計(jì)全國(guó)溫度Top10并繪圖
      下一篇:Solr管理界面詳解
      相關(guān)文章
      国产精品亚洲专区无码唯爱网| 亚洲色大成WWW亚洲女子| 亚洲成AV人片在WWW| 亚洲午夜久久久精品电影院| 亚洲高清资源在线观看| 久久精品国产亚洲av高清漫画 | 亚洲成a人片在线观看日本| 亚洲色大成网站www永久一区| 久久久久亚洲?V成人无码| 亚洲色偷偷综合亚洲AV伊人| 亚洲午夜福利精品久久| 亚洲中文字幕成人在线| 亚洲一区二区视频在线观看| 久久亚洲国产成人影院网站| 国产精品亚洲玖玖玖在线观看| 亚洲综合最新无码专区| 亚洲愉拍99热成人精品热久久| 亚洲熟妇无码AV在线播放| 亚洲乱码国产乱码精品精| 亚洲国产婷婷六月丁香| 久久国产亚洲观看| 亚洲美女视频一区| 亚洲激情视频网站| 亚洲人成网站18禁止久久影院| 亚洲av片不卡无码久久| 亚洲日本va在线观看| 亚洲精品人成网在线播放影院| 亚洲国产成a人v在线观看| 国产亚洲精品VA片在线播放| 亚洲精品无码永久在线观看男男| 国产精品亚洲色婷婷99久久精品| 亚洲色偷偷狠狠综合网| 国产精品久久久亚洲| 亚洲视频一区网站| 7777久久亚洲中文字幕| 亚洲AV成人无码久久WWW| 亚洲AV中文无码乱人伦在线视色| 国产亚洲精午夜久久久久久| 久久亚洲国产视频| 亚洲伊人久久大香线焦| 亚洲av无码无线在线观看|