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

熱點內容
做解壓學慣用品手工 瀏覽:85
手機文件夾刪除又出現怎麼解決 瀏覽:285
php時間段分析 瀏覽:213
redisjava類 瀏覽:911
剪力牆錯開部分鋼筋是否加密 瀏覽:477
linux字元設備驅動程序 瀏覽:57
全排列演算法java 瀏覽:465
中國銀行app轉賬電子回單在哪裡 瀏覽:51
操作簡單的程序員 瀏覽:600
數值積分演算法求pi 瀏覽:18
按鈕怎麼連命令方塊 瀏覽:909
房貸還清後不解壓能貸款嗎 瀏覽:36
程序員哄老婆開心技術 瀏覽:672
oracle自動備份壓縮文件 瀏覽:855
遵義人字形加密網帶 瀏覽:255
寧波人社在哪裡下載app 瀏覽:92
好噠商戶app下載在哪裡下載 瀏覽:609
廣發兌星巴克是在app哪裡操作 瀏覽:783
linuxgetline 瀏覽:216
app的懸浮窗許可權在哪裡設置 瀏覽:687