我正在嘗試在我自己的 shell 中實作 append 命令。我成功地附加到現有檔案,但是每當我嘗試附加到檔案時,它都不存在它會在沒有任何權限的情況下創建一個檔案(不讀取也不寫入)
if (append) {
fd = open(outfile,'a');
lseek(fd,0,SEEK_END);
close (STDOUT_FILENO) ;
dup(fd);
close(fd);
/* stdout is now appended */
}
我應該怎么做才能制作具有權限的檔案?
uj5u.com熱心網友回復:
該open()系統呼叫不使用字符常量,指示“追加”。閱讀 POSIX 規范open()- 并查看O_APPEND等。您需要的標志不僅僅是O_APPEND,open()如果要創建檔案(如果檔案不存在O_CREAT),則需要三個引數,等等。
if (append)
{
fd = open(outfile, O_CREAT|O_APPEND|O_WRONLY, 0644);
if (fd < 0)
…deal with error…
}
你可以寫0644,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH但八進制更短,(經過 30 多年的實踐)更容易閱讀。如果您愿意(八進制),您可以為組 ( S_IWGRP) 和其他人 ( S_IWOTH)添加寫權限0666,但除非您知道您希望組成員和其他人修改檔案,否則省略這些更安全——因為這違背了歷史先例. 用戶可以并且應該將 shellumask值設定為022以防止組和其他人在默認情況下能夠寫入檔案,但如果沒有它,則安全無害(IMO)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395574.html
上一篇:與BASH中的字串比較的問題
下一篇:在bash中剪切分隔符
