回答
一般來說,沒有沒有。您需要自己跟蹤這些信息。您可能能夠嘗試寫入文件並獲得錯誤或成功,但這取決於您正在嘗試執行的操作。
沒有直接回答你的問題,但你可以使用freopen
FILE *freopen(const char *path, const char *mode, FILE *stream);
它打開一個指定的流指定的文件,先關閉流,如果它已經 開放。如果流先前具有方向,則freopen
將清除它。
是的,有辦法,但他們是歷史性的,並被別人皺起了眉頭。此外,您需要研究/測試確切的值,然後承擔新的操作系統版本將撤銷您的假設的風險。
無論如何,考慮到這一點,您可以測試FILE結構中的特定值的字段。該結構位於stdio.h中,感興趣的領域是:_flag和_file。
寫了一些特徵代碼,並在系統上運行,如:
#include <stdio.h>
main()
{
FILE *fp;
fp = fopen("test1.txt", "r");
printf("(r) _flag = %04x, _file = %04x\n", fp->_flag, fp->_file);
fp = fopen("test2.txt", "a");
printf("(a) _flag = %04x, _file = %04x\n", fp->_flag, fp->_file);
fp = fopen("test3.txt", "w");
printf("(w) _flag = %04x, _file = %04x\n", fp->_flag, fp->_file);
}
你可以看到每種類型的開放相關的_flag值。
在Windows/XP,我有以下幾點:
(r) _flag = 0001, _file = 0003
(a) _flag = 0002, _file = 0004
(w) _flag = 0002, _file = 0005
通知,追加相同寫! _file值似乎是_iob的索引,其中stdin是_file = 0000.
無論如何,亂七八糟,試驗。嘗試從文件中寫入/讀取數據並查看_flag是否更改?
這是基於任何標準,還是僅僅基於Windows? – Potatoswatter
它的起源在K&R第二版之前。我的理解是Unix保留FILE結構的更簡化版本。但是你應該能夠在stdio.h中找到,看看在Unix中FILE是否包含_flag或_mode字段。我使用Windows/XP並可以獲取該信息。 – JackCColeman
任何實現都有這樣的事情,所以說它的起源早於標準是一個空洞的事實。 K&R第二版本質上是對C90標準IIRC的評論,但不是對標準化和創新的嘗試。 Unix既不是標準操作系統,也不是操作系統。這個答案不過是對你所在的平臺進行反向工程的建議,這不是一個好建議。 – Potatoswatter
FILE * f;
//...
if (f->flags == 2 || f->flags == 3) {
// writable
}
- 1. 確定目錄是否可寫
- 2. python「file write()」方法是否可以保證數據被正確寫入?
- 3. 確定是否點可見
- 4. 確定AJAX是否可能?
- 5. 確定WindowServer是否可用?
- 6. 確定是否Any.Type是可選
- 7. 如何確定是否可以寫入管道
- 8. 是否有可能確定.NET程序集編寫的語言?
- 9. 如何確定請求的目錄是否可寫?
- 10. 是否可以確定UIImage是否可伸縮?
- 11. 編寫JQuery是否正確
- 12. 確定它是否是鎖定類型(讀取或寫入)
- 13. 如何確定PDF是否可搜索
- 14. 如何確定卷積是否可分?
- 15. 這種語言是否可確定
- 16. 確定NSManagedObject屬性是否可選
- 17. 確定細胞是否可見
- 18. VBA - 確定IP是否可達
- 19. 如何確定monad是否可交換?
- 20. 確定字符是否可打印
- 21. 如何確定主機是否可達?
- 22. 確定是否可用的圖像
- 23. 是否可以確定動畫順序
- 24. 確定UDP主機是否可達?
- 25. 確定通知面板是否可見
- 26. 是否確定改變可選參數
- 27. 確定Unicode字符是否可見?
- 28. 如何確定cameraDevice是否可用?
- 29. 確定網格是否可解
- 30. 是否可以確定鍵盤振動?
有沒有標準的方法來做到這一點,但大多數平臺會讓你這樣或那樣做。如果你不想完全跨平臺(或者不介意針對不同平臺有不同的代碼),你應該指定你的操作系統,你可能會得到一個體面的答案。 – zneak