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

熱點內容
編程珠璣筆記 瀏覽:274
結束命令行 瀏覽:268
力學原理pdf 瀏覽:729
宏定義編譯後不變 瀏覽:397
如何搞免費伺服器 瀏覽:206
神經系統pdf 瀏覽:665
如何查看伺服器上的資料庫伺服器 瀏覽:188
壓縮機型號v代表什麼 瀏覽:51
旅遊類源碼 瀏覽:862
電腦伺服器類型怎麼設置 瀏覽:230
pdf炒股 瀏覽:786
伺服器地址缺少埠號什麼意思 瀏覽:530
下載需要解壓的小說用哪個軟體 瀏覽:534
廣東分布式伺服器雲主機 瀏覽:583
伺服器忙打不開怎麼辦 瀏覽:15
tif壓縮軟體 瀏覽:413
程序員那麼可愛陸漓上班第1天 瀏覽:952
macbookair自帶什麼app 瀏覽:701
如何關了加密的軟體 瀏覽:581
程序員p2p待遇 瀏覽:923