一、檔案開啟和關閉
fopen和fclose操作:
不同的type含義:
二、檔案內容掃瞄
從檔案中讀取內容:
$fgetc每次讀取乙個字元(8bits);
$fgets每次讀取一行裡的部分或者全部內容,用作字串輸出,每次讀的內容的bit數目或多少取決於str的大小(有多少bit);
$fscanf從讀檔案中讀取內容,按給定的格式輸出;
$fread用於從檔案讀取二進位制資料,每次讀取的資料位寬或者多少取決於integral_var的大小(有多少bit);
三、檔案定位
四、檔案內容輸出
$fflush
將寫buffer的內容(需要寫出的內容),一次性寫到檔案裡;如果沒有指定檔案,將會寫到所有開啟的檔案中。
五、檔案尾判斷
$feof:檢測檔案結束標誌eof,這個使用的時候需要注意,遇到過類似的問題:
使用while迴圈判斷eof,結果進入死迴圈:
c語言中的案例:
sv中的案例:
while(! $feof(f1) && ! $ferror(f1))的使用方法如果底下接的是%fscanf的時候容易出現死迴圈的問題,譬如:
while(! $feof(f1) && ! $ferror(f1))
a = $fscanf(f1,"%d",&al)
能讀出第乙個整數,但讀到字元時就出現死迴圈。fscanf(f1,"%d",&al)讀到字元的時候,因為讀取不到整數,檔案指標不會往下走的。所以while(! $feof(f1) && fer
ror(
f1))
一直為真
,進入死
迴圈。這
種情況下
一般使用
ferror(f1)) 一直為真,進入死迴圈。這種情況下一般使用
ferror
(f1)
)一直為
真,進入
死迴圈。
這種情況
下一般使
用fgets或者$fread可以避免這樣的問題。
還有看到過用feof判斷while迴圈多讀一次的問題:
這裡有案例:
執行如下程式:
char c;
while(!feof(fp))
會發現多輸出了乙個ff,原因就是在讀完最後乙個字元後,fp->flag仍然沒有被置為_ioeof,因而feof()仍然沒有探測到檔案結尾。直到再次呼叫fgetc()執行讀操作,feof()才能探測到檔案結尾。這樣就多輸出了乙個-1(即ff)。
正確的寫法應該是:
char c;
c = fgetc(fp);
while(!feof(fp))
while(!feof(fp))是判斷的前一次從檔案中讀取的字元,所以在最後乙個字元那裡,讀取列印出來,再到while判斷一次,這一次讀取的就是檔案結尾-1(而判斷迴圈的卻是最後乙個字元)。
system Verilog 跳轉操作
在verilog中,使用disable宣告來從執行流程中的某一點跳轉到另一點。特別地,disable宣告使執行流程跳轉到標註名字的宣告組末尾,或者乙個任務的末尾。verilog中的disable命令用法有很多,下面是乙個簡單的例子,解釋了disable的作用範圍 1 find first bit s...
System Verilog任務 函式
在system verilog中,begin end是可選的 task mytask1 output logic x,input logic y endtask還可以使用ref型別的引數對變數進行引用,類似於c中的指標,但ref不允許進行陣列引數的傳遞 還可以使用預設引數 增加了return語句 方...
SystemVerilog語言簡介 二
6.使用者定義的型別 verilog不允許使用者定義新的資料型別。systemverilog通過使用typedef提供了一種方法來定義新的資料型別,這一點與c語言類似。使用者定義的型別可以與其它資料型別一樣地使用在宣告當中。例如 typedef unsigned int uint uint a,b ...