導航:首頁 > 操作系統 > 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相關的資料

熱點內容
好用的匯編語言編譯器 瀏覽:861
自己編譯安卓虛擬機 瀏覽:911
中國的古代演算法 瀏覽:654
上層怎麼看程序員 瀏覽:25
程序員便當排骨 瀏覽:852
如何禁用安卓全家桶 瀏覽:259
oa伺服器異常怎麼辦 瀏覽:71
cmd編譯utf8 瀏覽:278
怎麼截取app接受的數據 瀏覽:277
nrf24l01pdf 瀏覽:299
php字元串轉array 瀏覽:435
U盤分了文件夾後 瀏覽:941
javasetstring 瀏覽:838
壓縮包里文件夾是白色的 瀏覽:474
編譯鏈接知乎 瀏覽:592
php查詢按鈕 瀏覽:717
有音響游戲解壓神器 瀏覽:255
怎麼壓縮圖片jpeg 瀏覽:714
澳大利亞net程序員 瀏覽:581
程序員加班難受 瀏覽:991