linux 下清除緩衝區
C標準規定 fflush()函式是用來重新整理輸出(stdout)快取的。對於輸入(stdin),它是沒有定義的。
但是有些編譯器也定義了 fflush( stdin )的實現,比如微軟的VC。其它編譯器是否也定義了 fflush( stdin )的實現應當查詢它的手冊。GCC編譯器沒有定義它的實現,所以不能使用 fflush( stdin )來重新整理輸入快取。
對於沒有定義 fflush( stdin )的編譯器,可以使用 fgets()函式來代替它(比用 getchar()、scanf()等函式通用性好)。比如樓主提供的第一個程式中可以這樣忽略輸入流中留下的回車等其它輸入,從而使下一次的輸入總保持一個“乾淨”的狀態。
[code]// ...
char sbuf[1024];// ...
// fflush(stdin); // 用下面一句代替
fgets( sbuf, 1024, stdin );// ...
在Linux程式設計的時候需要清空標準輸入緩衝區,於是使用瞭如下Windows程式設計中的方法:1、fflush(stdin);這個fflush()函式根本不是標準C中的函式,只是標準C的擴充套件,所以在Linux中使用根本不行;
2、中網上搜索了下,發現有網友建議使用rewind(stdin);這個函式其實是將指標指向流的開始處。但是它是檔案操作中的一個函式,操作的是FILE型流,在Windows程式設計中是可以清空標準輸入緩衝區的,但是在Linux中不行。
3、通過讀完標準緩衝區中的剩餘字元並丟棄掉來清空標準緩衝區,使用的函式是getchar(),此函式的作用是從標準輸入緩衝區中讀出一個字元,此方法中Linux中可行。如果需要清除stdin可以通過如下迴圈實現:char ch;
while((ch=getchar())!='\n'&&ch!=EOF);
以上語句將清除stdin中的字元,知道遇到換行符或者是讀完緩衝區。以上的方法均可以在Windows程式設計中用來清除緩衝區;
4、在Linux程式設計中也還是有一種用來清空stdin中的方法,直接呼叫如下的函式:
setbuf(stdin, NULL);
此函式我還沒有來得及測試;
通過以上分析,在Linux下清空stdin用兩種方法:
1.通過讀取剩餘的字元並丟棄掉;char ch;
while((ch=getchar())!='\n'&&ch!=EOF);或者是:char s[1024];fgets(s,1024,stdin);2.使用函式setbuf(stdin,NULL);
以上跟大家分享,如有更好的方法請指出,謝謝。詳細出處參考:http://www.itqun.net/content-detail/72320.html
相關推薦
linux 下清除緩衝區
如何清空輸入緩衝區的內容 C標準規定 fflush()函式是用來重新整理輸出(stdout)快取的。對於輸入(stdin),它是沒有定義的。 但是有些編譯器也定義了 fflush( stdin )的實現,比如微軟的VC。其它編譯器是否也定義了 fflush(
Linux下清除tomcat緩存
tomcat AS tex 什麽 清除 nbsp 如果 article family 轉自:https://blog.csdn.net/ge_yulong/article/details/8066321 這是一直困擾人問題,特別是一些剛開始菜鳥,就會說怎麽我都更新啦都沒辦
Linux下清除快取
一、強制把系統快取寫入檔案sync和fsync函式, fflush和fsync的聯絡 傳統的UNIX實現在核心中設有緩衝儲存器,大多數磁碟I / O都通過快取進行。當將資料寫到檔案上時, 通常該資料先由核心複製到快取中,如果該快取尚未寫滿
Linux下清除ftp自動登入狀態
筆者在使用機子訪問ftp時一直連著上一個使用者登入狀態下訪問的地址,導致一直無法訪問公司裡的指定ftp目錄,想著登出狀態再重新登入,一時沒找到登出方法是在是鬱悶了一會。 後來通過查詢資料找到的解決辦法: 在圖形介面桌面點選左上角的「應用程式」-「工具」-「密
Linux下清除快取 drop_caches,sysctl(備忘)
1. 用命令 free -m 檢視一下記憶體的使用情況:然後清除快取後再來檢視一下記憶體的使用情況:前後對比可發現,快取由之前的110M縮小到了25M,效果比較明顯。2. 下面說一下 drop_caches:清空 pagecache:syncecho 1 > /proc
Linux下標準緩衝區的清空
當我們在使用scanf()函式讀取標準輸入時,其結果並不總是正確。有時,為了防止緩衝區資料對結果的影響,我們需要清空標準緩衝區。首先我們得知道在LINUX下標準I/O為我們提供了那幾中型別的緩衝區。
svn之——linux下清除svn的使用者名稱和密碼
方法一: linux下刪除~/.subversion/auth即可清除之前的使用者名稱和密碼:rm -rf ~/.subversion/auth 以後再操作svn會提示你輸入使用者名稱,這時就可以使用新的了 方法二: svn操作時帶上--username引數,比如svn -
在Linux下使用makefile寫一個進度條,以及對\r 和\n,緩衝區的簡單瞭解
1.’\r’和‘\n’的區別 \r:表示回車:它只會回到這一行的最前邊 \n:表示回車換行。它會回到這一行的最前邊,然後跳到下一行 。 2.緩衝區 c函式如printf(),在輸出時,shell預設將資料輸出到標準輸出如顯示器,而printf()在
linux下檢視系統socket讀寫緩衝區
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <sys/type
linux 下iptables 執行清除命令 iptables -F 要非常小心
在linux系統已經配置好iptables的情況下,一定要非常小心的使用iptables -F,如果預設策略已經配置為deny的話,再使用iptables -F,會導致網路立馬中斷!(親身經歷啊!......) (adsbygoogle = window.ads
Linux下緩衝區溢位攻擊的原理及對策
前言 從邏輯上講程序的堆疊是由多個堆疊幀構成的,其中每個堆疊幀都對應一個函式呼叫。當函式呼叫發生時,新的堆疊幀被壓入堆疊;當函式返回時,相應的堆疊幀從堆疊中彈出。儘管堆疊幀結構的引入為在高階語言中實現函式或過程這樣的概念提供了直接的硬體支援,但是由於將函式返回地址這樣的
Linux下隨機10字元病毒的清除
一、現象 伺服器不停的向外發包,網路流量暴滿,且CPU持續100%。遠端登入後檢視發現有一長度為10的隨機字串程序,kill掉,會重新生成另外長度為10的字串程序。刪除檔案也會重複生成 lsof -R | grep “/usr/bin”,發現主程序不變,總
C/C++ 輸入輸出緩衝區在Windows和Linux下對比
C++中cin、cout,cerr和C的stdin、stdout、stderr都是同步的,即iostream 物件和 and cstdio流是同步的,同步關係如下: 同步即表明我們可以在程式中混合用cout和printf或其他對應的流對。可以用std::ios
Linux下緩衝區溢位攻擊及Shellcode
4.3.2 Linux32環境下函式的返回地址 編譯、連結、執行程式buffer_overflow.c,並關閉Linux的棧保護機制,參見截圖: 下面用gdb除錯程式: 在foo函式的入口、呼叫st
linux下安裝JDK
down 安裝目錄 port libraries .com hit java_home sse ava 方法一:手動安裝jdk的安裝包,配置環境變量 1.在/usr/目錄下創建java目錄 [[email protected]/* */ ~]# mkdi
Linux下nagios的搭建及相關配置
linux下nagios的搭建及相關配置一、LAMP環境部署1、安裝php 1.安裝yum源 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh http://rpm
Linux下svn的安裝與部署
myeclipse span .com 服務 點擊 svn服務器 。。 hook idt 最近工作碰到一個問題,我和一個同夥負責開發一個管理系統,基於原來的代碼上進行修改,每當他修改之後,我要再修改都要和他確定是不是最新的文件,才能進行修改。非常影響工作的效率,所以
Linux下掛載u盤
成功 掛載 消失 linux下 spa 一個 fat 執行 class 1.先進入/mnt/目錄新建一個usb目錄 cd /mnt/ mkidr usb 2.先fdisk -l,然後插上U盤,fdisk -l 查看是否有新的硬盤添加上來了 3.執行掛載 mo
Linux下常用命令之sed學習總結
linux sed sed命令 正則表達式 sed總結 Sed功能說明:Sed是linux下一個強大的文本文件處理工具,通過對文件增加、刪除、查找、查詢操作,配合正則表達式以實現工作中的各種需求。同時也是一名運維人員必須掌握的核心技能。---------------------------
linux下安裝DB2的詳細步驟
justify linux style 第一步:檢查程序包及其版本 compat-libstdc++-7.3-2.96.118.i386.rpm 在linux的安裝盤上,找到後使用rpm -i compat-libstdc++-7.3-2.96.118.i386.rpm 安裝即可