簡體   English   中英

當將字節數寫入標准輸入或標准輸出中時,在if塊中評估write()系統調用的哪個參數

[英]Which argument of write() sys-call is evaluated in an if block when the number of bytes are written either into standard input or standard output

當將字節數寫入標准輸入或標准輸出時,在if塊中計算write()系統調用的哪個參數。 在下面的示例中(來自Linux編程入門);

if(write(1, "Here is some data\n", 18) != 18)
    write(2, "Write error in file descriptor 1\n", 46);

我試圖通過使字符串長於或短於18個字節來使if語句為false,但仍然打印字符串“ Here is some data”。 僅當我將第三個參數從18更改為17或19時,才對第二個write語句求值。似乎if條件僅由第三個參數求值,因為事實並非如此。 請幫助我理解它。

第一次通話:

write(1, "Here is some data\n", 18)

總是執行。 當寫入的字符數不是 18(對應於代碼中的“!= 18”)時,還將執行第二個調用:

write(2, "Write error in file descriptor 1\n", 46);

我認為您正在嘗試提出其他問題,但是我不確定這是什么。 當前的答案是:全部。

必須評估所有要寫入的參數,以便可以調用該函數,從而可以進行比較。

我猜您可能會問的是:為什么不更改字符串長度會更改寫入的字節數。 這是因為C會很樂意讓您閱讀字符串末尾的內容。 如果您指定要發送18個字節,則將發送18個字節,這意味着僅發送字符串的一部分,還是讀取“ \\ n”后面的一些垃圾使其成為18。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM