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

熱點內容
Android框架工程師 瀏覽:384
計算機編程機器人工程師招聘 瀏覽:681
怎麼添加mite伺服器 瀏覽:579
方舟怎麼命令一隻恐龍手機版 瀏覽:709
javaqq郵箱發送 瀏覽:168
cms淘寶客網站源碼 瀏覽:930
如何連接選股伺服器 瀏覽:28
華為丟了一個文件夾 瀏覽:519
我們買的絕地求生屬於什麼伺服器 瀏覽:413
linux網卡配置dhcp 瀏覽:284
安卓子系統文件夾 瀏覽:279
java數20個 瀏覽:867
matplotlib源碼 瀏覽:795
linux查看uid 瀏覽:18
android延時跳轉 瀏覽:180
如何模擬app對服務發出請求 瀏覽:805
程序員小陳的一天 瀏覽:701
凸多邊形凹多邊形凸包演算法 瀏覽:913
電腦如何加密碼不讓別人知道 瀏覽:909
如何用壓縮包安裝軟體 瀏覽:870