導航:首頁 > 操作系統 > linuxgetline

linuxgetline

發布時間:2025-01-12 10:55:11

linux shell md5sum 指令的詭異問題

初看你的代碼,貌似沒什麼問題,琢磨了半天才發現原來和相同文件的個數有關。
當你的相同文件數目大於等於3時,就會出這個問題。只有兩個文件相同時,則不會出。
比如你的
text,
text1,
text2
是相同的,第一次進入時
比較和處理text,
text1
沒有問題。
第二次進入時,此時要比較
text1

text2,相當於要執行
"md5sum
text1"
|
getline;
sum1=$1;
print
$0
"md5sum
text2"
|
getline;
sum2=$1;
print
$0
但是由於
"md5sum
text1"
|
getline
這條管道語句已經在上次比較
text

text1
時執行過了,awk在第二次執行的時候就不會再創建管道執行同樣的md5sum命令讓getline讀取,而是嘗試從之前打開的管道中讓getline讀取內容,顯然,此時已經沒有內容可讀了,因此此時getline
會失敗
(如果你用
if
語句判斷這條命令的返回值,會發現返回值不等於1
(應該是0,表示
end
of
file)。所以這條語句並不會更新
$0
$1
這些變數,所以後面你
print
$0
實際上列印的是
ls
-lS
得到的輸入。
解決方法很簡單,在每次
"md5sum
"name
|
getline
之後,用close命令,比如
"md5sum
"name1
|
getline;
sum1=$1;
close("md5sum
"name1)
print
$0
"md5sum
"name2
|
getline;
sum2=$1;
close("md5sum
"name2)
print
$0
這樣就在每次getline之後,都關閉管道,從而確保下次總能重新創建管道及執行md5sum命令。

❷ linux環境 C語言 getline()函數問題

*n是*ptr指向的緩沖區的大小。如果讀取的位元組數超過*n, *n值會被修改,緩沖區會被realloc。具體見man getline

如果數據量小,可以預先申請一個比較大的緩沖區,這樣getline無須重復申請內存,可以提高效率。

ssize_t size_t在/usr/include/sys/types.h
最終定義,要繼續跟到深層頭文件,如:
/usr/lib/gcc/i686-pc-linux-gnu/GCC_VERSION/include/stddef.h

閱讀全文

與linuxgetline相關的資料

熱點內容
資料庫查詢系統源碼 瀏覽:617
php5314 瀏覽:358
完美國際安裝到哪個文件夾 瀏覽:668
什麼app可以掃一掃做題 瀏覽:539
程序員編碼論壇 瀏覽:923
淘點是什麼app 瀏覽:660
中國高等植物pdf 瀏覽:453
51單片機時間 瀏覽:182
後台如何獲取伺服器ip 瀏覽:267
單片機流水燈程序c語言 瀏覽:234
程序員第二職業掙錢 瀏覽:239
運行里怎麼輸入伺服器路徑 瀏覽:840
pythonstepwise 瀏覽:509
劉一男詞彙速記指南pdf 瀏覽:64
php認證級別 瀏覽:368
方舟編譯啥時候推送 瀏覽:1011
php手機驗證碼生成 瀏覽:675
哲學思維pdf 瀏覽:14
凌達壓縮機有限公司招聘 瀏覽:534
weblogic命令部署 瀏覽:38