我正在嘗試使用write()from 函式<unistd.h>將命令列中的文本流式傳輸到檔案中。我已經嘗試了多種方法:
while(write(STDOUT_FILENO, argv[optind], strlen(STDIN_FILENO)) != 0)
{
write(STDOUT_FILENO, "\n", sizeof("\n"));
}
但繼續出現分段錯誤或無限回圈,而不允許我輸入任何內容。我需要在不使用read()的情況下執行此操作,唯一允許的權限是為用戶寫入。我正在嘗試使用Ctrl D信號結束輸入。
它如何運行的一個例子是:
./a.out file.h
This line will append to the end of the file
<ctrl d>
然后,當我打開檔案時,它應該This line will append to the end of the file在它的末尾。
uj5u.com熱心網友回復:
您需要read()fromSTDIN_FILENO進入一個本地緩沖區,然后write()該緩沖區到STDOUT_FILENO. 但是您明確表示“我必須在不使用 read() 的情況下執行此操作”,這意味著您對此非常不走運。STDIN不閱讀就無法獲得輸入。如果不能使用read(),是否可以使用其他閱讀功能,例如fread()、gets()、getline()等?
傳入file.h輸入引數有什么意義?當您執行命令時/a.out file.h,內容file.h根本不會發送到您的程式。在您的main()函式中,字串值"file.h"在argv[1]. 您必須使用該字串自己打開檔案,例如 with fopen(),然后根據需要讀/寫該檔案。
如果您希望通過 將 的內容發送file.h到您的程式STDIN,則需要改為執行/a.out < file.h。注意<重定向運算子。
但是,聽起來您的目標是打開file.h然后將STDIN輸入附加到它,在這種情況下,您需要更像這樣的東西:
FILE *f = fopen(argv[1], "w ");
if (!f) ...
char buffer[1024];
int nRead;
fwrite("\n", 1, 1, f);
while ((nRead = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0)
{
fwrite(buffer, 1, nRead, f);
}
fclose(f);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425666.html
上一篇:提示變數中的特殊字符已更改?
