導航:首頁 > 程序命令 > 緩沖區命令

緩沖區命令

發布時間:2022-06-28 18:34:12

1. C語言中,什麼是緩沖文件系統和文件緩沖區

目前c語言使用的文件系統分為緩沖文件系統(標准i
/
o)和非緩沖文件系統(系統i
/
o)。緩沖文件系統的特點是:在內存開辟一個「緩沖區」,為程序中的每一個文件使用,當執
行讀文件的操作時,從磁碟文件將數據先讀入內存「緩沖區」,裝滿後再從內存「緩沖區」依此讀入接收的變數。執行寫文件的操作時,先將數據寫入內存「緩沖區」,待內存「緩沖區」裝滿後再寫入文件。
因此當程序運行時雖然進行了寫數據操作,但是如果寫入的數據沒有裝滿內存中的緩沖區,就不會將數據寫入到磁碟文件中。當程序運行結束後,系統就會將緩沖區中的數據寫入到磁碟上的文件中,因此就可以看到文件中的內容。
常用的fopen命令就會使用文件讀寫緩沖區,fclose命令關閉文件,把緩沖區中的內容寫入磁碟上的文件中。詳見:
http://study.qqcf.com/web/171/19812.htm

2. 在DOS中生成高速緩存的命令是

smartdrv.exe
smartdrv.exe 是一個程序文件,用來在擴充內存中創建一個磁碟高速緩存區域,
從而縮短讀寫硬碟的時間。只用系統擁有硬碟與擴充內存的時候,系統才可以。
SMARTDRV.EXE可以通過命令行方式執行,還能完成通過CONFIG.SYS創建雙緩沖,
以便給在EMM386提供的內存活WINDOWS 386增強模式中不能正常運行的硬碟控制
器提供兼容性。
1、-------------命令行方式
SMARTDRV [/E:區塊大小][/B:BUFFER大小] [/C] [/R] [/L] [/Q] [/V] [/S]
[init cache size] [win cache size] [Drive +/-]
DRIVE +/- 指定某一個磁碟擁有磁碟緩存功能, 如果不加 +/- 就表示只允許
讀取緩存
/E:區塊大小 指定SMARTDRIVE 在內存與磁碟之間移動數據的每次搬移基本量。
區塊大小隻能是 1024/2048/4096/8192
INIT CACHE SIZE 啟動SMARTDRIVE 時候擁有磁碟高速緩沖區的大小 單位是K
這個數值越大,磁碟存取工作的效果越好
WIN CACHE SIZE 指定SMARTDRIVE 將為WINDOWS減少多少高速緩沖區。
/B:BUFFER SIZE 表示緩沖區的大小。緩沖區越大,佔用常規內存越多,預設
是16
/C 把內存中的所有緩沖區信息寫入硬碟
/R 清除所有高速緩沖區內容,重新啟動SMARTDRIVE
/L 不把SMARTDRV.EXE程序裝入UMB,不過不加此參數,系統會自動把
SMARTDRV.EXE 調入UMB
/V 設定在啟動SMARTDRIVE的時候,屏幕顯示狀態信息
/Q 不顯示狀態信息,但是如果程序執行出錯,就會顯示
/S 顯示附加信息

3. shell里有沒有類似於C語言fflush這種,刷新緩沖區的命令

樓主指的是 linux Shell 吧?

1. 試試 sync 命令。
sync writes any data buffered in memory out to disk.
但不清楚是不是將緩沖區給清空了。

2. sync不行的話用 awk 吧,awk里的語法同C語言,可以直接使用C語句。
echo "" | awk '{fflush()}'

4. 什麼叫『緩沖區』電腦術語

緩沖區溢出
緩沖區是內存中存放數據的地方。在程序試圖將數據放到計算機內存中的某一位置,但沒有足夠空間時會發生緩沖區溢出。

緩沖區是程序運行時計算機內存中的一個連續的塊,它保存了給定類型的數據。問題隨著動態分配變數而出現。為了不用太多的內存,一個有動態分配變數的程序在程序運行時才決定給他們分配多少內存。如果程序在動態分配緩沖區放入太多的數據會有什麼現象?它溢出了,漏到了別的地方。一個緩沖區溢出應用程序使用這個溢出的數據將匯編語言代碼放到計算機的內存中,通常是產生root許可權的地方。單單的緩沖區溢出,並不會產生安全問題。只有將溢出送到能夠以root許可權運行命令的區域才行。這樣,一個緩沖區利用程序將能運行的指令放在了有root許可權的內存中,從而一旦運行這些指令,就是以root許可權控制了計算機。總結一下上面的描述。緩沖區溢出指的是一種系統攻擊的手段,通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。據統計,通過緩沖區溢出進行的攻擊占所有系統攻擊總數的80%以上。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。例如下面程序:

example0.c
-----------------------------------------------------------
void function(char *str) {
char buffer[16];

strcpy(buffer,str);
}
-----------------------------------------------------------

上面的strcpy()將直接把str中的內容到buffer中。這樣只要str的長度大於16,就會造成buffer的溢出,使程序運行出錯。存在象strcpy這樣的問題的標准函數還有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循環內的getc(),fgetc(),getchar()等。在C語言中,靜態變數是分配在數據段中的,動態變數是分配在堆棧段的。緩沖區溢出是利用堆棧段的溢出的。一個程序在內存中通常分為程序段,數據端和堆棧三部分。程序段里放著程序的機器碼和只讀數據,這個段通常是只讀,對它的寫操作是非法的。數據段放的是程序中的靜態數據。動態數據則通過堆棧來存放。在內存中,它們的位置如下:

/――――――――\ 內存低端
|程序段|
|―――――――――|
|數據段|
|―――――――――|
|堆棧|
\―――――――――/內存高端

堆棧是內存中的一個連續的塊。一個叫堆棧指針的寄存器(SP)指向堆棧的棧頂。堆棧的底部是一個固定地址。堆棧有一個特點就是,後進先出。也就是說,後放入的數據第一個取出。它支持兩個操作,PUSH和POP。PUSH是將數據放到棧的頂端,POP是將棧頂的數據取出。在高級語言中,程序函數調用和函數中的臨時變數都用到堆棧。參數的傳遞和返回值是也用到了堆棧。通常對局部變數的引用是通過給出它們對SP的偏移量來實現的。另外還有一個基址指針(FP,在Intel晶元中是BP),許多編譯器實際上是用它來引用本地變數和參數的。通常,參數的相對FP的偏移是正的,局部變數是負的。當程序中發生函數調用時,計算機做如下操作:首先把參數壓入堆棧;然後保存指令寄存器(IP)中的內容,做為返回地址(RET);第三個放入堆棧的是基址寄存器(FP);然後把當前的棧指針(SP)拷貝到FP,做為新的基地址;最後為本地變數留出一定空間,把SP減去適當的數值。

下面舉個例子:
example1.c:
------------------------------------------------------------
void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
}

void main() {
function(1,2,3);
}
-----------------------------------------------------------

為了理解程序是怎樣調用函數function()的,使用-S選項,在Linux下,用gcc進行編譯,產生匯編代碼輸出:

$ gcc -S -o example1.s example1.c

看看輸出文件中調用函數的那部分:

pushl $3
pushl $2
pushl $1
call function

這就將3個參數壓到堆棧里了,並調用function()。指令call會將指令指針IP壓入堆棧。在返回時,RET要用到這個保存的IP。在函數中,第一要做的事是進行一些必要的處理。每個函數都必須有這些過程:

pushl %ebp
movl %esp,%ebp
subl $20,%esp

這幾條指令將EBP,基址指針放入堆棧。然後將當前SP拷貝到EBP。然後,為本地變數分配空間,並將它們的大小從SP里減掉。由於內存分配是以字為單位的,因此,這里的buffer1用了8位元組(2個字,一個字4位元組)。Buffer2用了12位元組(3個字)。所以這里將ESP減了20。這樣,現在,堆棧看起來應該是這樣的。

低端內存高端內存
buffer2 buffer1 sfp ret a b c
< ------ [ ][ ][ ][ ][ ][ ][ ]
棧頂棧底

緩沖區溢出就是在一個緩沖區里寫入過多的數據。那怎樣利用呢,看
一下下面程序:

example2.c
-----------------------------------------------------------
void function(char *str) {
char buffer[16];

strcpy(buffer,str);
}

void main() {
char large_string[256];
int i;

for( i = 0; i < 255; i++)
large_string[i] = 'A';

function(large_string);
}
------------------------------------------------------------

這個程序是一個經典的緩沖區溢出編碼錯誤。函數將一個字元串不經過邊界檢查,拷貝到另一內存區域。當調用函數function()時,堆棧如下:

低內存端buffer sfp ret *str高內存端
< ------ [ ][ ][ ][ ]
棧頂棧底
很明顯,程序執行的結果是"Segmentation fault (core mped)"或類似的出錯信息。因為從buffer開始的256個位元組都將被*str的內容'A'覆蓋,包括sfp, ret,甚至*str。'A'的十六進值為0x41,所以函數的返回地址變成了0x41414141, 這超出了程序的地址空間,所以出現段錯誤。可見,緩沖區溢出允許我們改變一個函數的返回地址。通過這種方式,可以改變程序的執行順序。

鍵盤的內部有一塊微處理器,它控制著鍵盤的全部工作,比如主機加電時鍵盤的自檢、掃描,掃描碼的緩沖以及與主機的通訊等等。當一個鍵被按下時,微處理器便根據其位置,將字元信號轉換成二進制碼,傳給主機和顯示器。如果操作人員的輸入速度很快或CPU正在進行其它的工作,就先將鍵入的內容送往內存中的鍵盤緩沖區,等CPU空閑時再從緩沖區中取出暫存的指令分析並執行

5. 在DOS里提高緩存的命令是什麼,或者用其它的方法.

smartdrv.exe

smartdrv.exe 文件的使用方法

smartdrv.exe 是一個程序文件,用來在擴充內存中創建一個磁碟高速緩存區域,
從而縮短讀寫硬碟的時間。只用系統擁有硬碟與擴充內存的時候,系統才可以。
SMARTDRV.EXE可以通過命令行方式執行,還能完成通過CONFIG.SYS創建雙緩沖,
以便給在EMM386提供的內存活WINDOWS 386增強模式中不能正常運行的硬碟控制
器提供兼容性。
1、-------------命令行方式
SMARTDRV [/E:區塊大小][/B:BUFFER大小] [/C] [/R] [/L] [/Q] [/V] [/S]
[init cache size] [win cache size] [Drive +/-]
DRIVE +/- 指定某一個磁碟擁有磁碟緩存功能, 如果不加 +/- 就表示只允許
讀取緩存
/E:區塊大小 指定SMARTDRIVE 在內存與磁碟之間移動數據的每次搬移基本量。
區塊大小隻能是 1024/2048/4096/8192
INIT CACHE SIZE 啟動SMARTDRIVE 時候擁有磁碟高速緩沖區的大小 單位是K
這個數值越大,磁碟存取工作的效果越好
WIN CACHE SIZE 指定SMARTDRIVE 將為WINDOWS減少多少高速緩沖區。
/B:BUFFER SIZE 表示緩沖區的大小。緩沖區越大,佔用常規內存越多,預設
是16
/C 把內存中的所有緩沖區信息寫入硬碟
/R 清除所有高速緩沖區內容,重新啟動SMARTDRIVE
/L 不把SMARTDRV.EXE程序裝入UMB,不過不加此參數,系統會自動把
SMARTDRV.EXE 調入UMB
/V 設定在啟動SMARTDRIVE的時候,屏幕顯示狀態信息
/Q 不顯示狀態信息,但是如果程序執行出錯,就會顯示
/S 顯示附加信息

6. 如何設置Windows默認命令行窗口大小和緩沖區大小

方法一:使用mode命令

查看一下mode的用法:mode /?

可以得到修改窗口大小的用法是:MODE CON[:] [COLS=c] [LINES=n]

現在把窗口大小從默認的80x40改成120x40:

mode con cols=120 lines=40

但是這樣改了以後,就沒有緩沖區了,而且開一個新的窗口以後,還是默認的大小

方法二:修改注冊表

保存系統默認的 cmd 命令窗口的屏幕緩沖區大小的兩個鍵值分別是:

窗口大小: HKEY_CURRENT_USER\Console\ScreenBufferSize 如果120*40 時值為 002a0078

屏幕緩沖區大小: HKEY_CURRENT_USER\Console\WindowSize 如 120*2000 時值為 07d00078

用下面兩條命令來把窗口大小和屏幕緩沖區大小分別改成 120*40 和 120*2000:

reg add "HKEY_CURRENT_USER\Console" /t REG_DWORD /v WindowSize /d 0x002a0078 /f
reg add "HKEY_CURRENT_USER\Console" /t REG_DWORD /v ScreenBufferSize /d 0x07d00078 /f

然後就好了。

7. linux vim的命名緩沖區怎樣用

翻譯的比較差。書上「緩沖區」這個術語,英文是
register,一般翻譯成寄存器。
因為,vi
里還有一個術語是
buffer,通常翻譯成緩沖區。所以你在理解書中提的概念後,最好還是習慣用寄存器這個名字。
用法很容易,如果你已經對剪切、復制和粘貼的
d
y
p
等命令熟悉的話,那麼在它們前面加上
"x
(一個英文的雙引號,即
shift
+

和一個字母
a-z
都可以)。
比如想剪切當前行到寄存器
m。就按:
1 "mdd
一共4個字元。
粘貼的話,用
1"mp
就可以了。

8. c#中有清空緩沖區嗎 如果有的話命令是什麼 C的是fflush(stdin)

對於初學的C語言中的c,F6應該是清空緩沖區的。

9. 如何關閉 vim 的緩沖區

不清楚你說的關閉vim緩沖區是什麼意思。
vim的緩沖區可以進行刪除或者清除操作,一般不使用關閉的詞。
1、刪除vim的緩沖區可以用:bdelete (buffer delete的簡寫)
2、要清除一個緩沖區,可以使用:bwipe(buffer wipe).
3、刪除, ":bdelete" 命令刪除了緩沖區以後,Vim 依然記得它。這個緩沖區實際
上成了 "列表外" 緩沖區,它不再出現在 ":buffers" 命令所報告的列表中。 要讓
Vim 徹底忘記一個緩沖區,用 ":bwipe" 命令。

10. cmd的緩沖區大小和數量是什麼東西想把默認值調大一些,改了之後會出問題嗎

這個緩沖區大小的條數是你輸入命令後所能記載命令的條數。
比如你打了51個命令,但圖上緩沖區大小是50,那麼就有一條命令無法被記錄。

正常情況下按鍵盤的上箭頭,就會出現上次打出的命令,這個區域大小就是記錄這個命令個數的。
至於緩沖區數量,這個就不知道什麼意思了。

閱讀全文

與緩沖區命令相關的資料

熱點內容
單片機課程設計軟體流程圖 瀏覽:389
怎樣把文件夾名字改成可見 瀏覽:169
最奇怪的解壓視頻 瀏覽:742
android上傳圖片內存溢出 瀏覽:296
yii命令行 瀏覽:445
javaweb音樂 瀏覽:203
安卓手機最好用什麼軟體 瀏覽:352
編譯原理lr分析講解 瀏覽:143
單純程序員哭了 瀏覽:336
男生設計app哪個好 瀏覽:765
梯形圖是編譯還是解釋執行 瀏覽:473
錄屏好用的app哪個好用 瀏覽:637
一念逍遙新伺服器怎麼看 瀏覽:92
移動app的信用充話費在哪裡 瀏覽:502
單片機接感測器 瀏覽:74
免費pdf工具 瀏覽:382
pdf加密一機一碼 瀏覽:602
怎麼把百度雲資源壓縮 瀏覽:458
不會數學英語如何編程 瀏覽:88
如何能知道網站伺服器地址 瀏覽:648