可以使用這樣的readdir_r
嗎?我沒有找到關於它的規範什麼,但也許我只是盲目...對於readdir_r,可能條目和結果具有相同的值?
回答
這是readdir_ [R,第二個參數是指針一個struct的dirent,而不是一個結構dirent本身,第三個參數是一個指向結構dirent的指針,它接收struct dirent的地址或NULL作爲結束目錄。用法是一樣的東西
struct dirent* pentry = malloc(offsetof(struct dirent, d_name) +
pathconf(dirpath, _PC_NAME_MAX) + 1);
if (!pentry)
out_of_memory();
for (;;){
struct dirent* result;
readdir_r(dirp, pentry, &result); // you can check the return code, but it only fails if dirp is invalid
if(!result)
break;
// process result
}
free(pentry);
至於斯托伊奇上面所指出的,參數是按值傳遞的,所以你可以通過第二ARG(pentry)作爲第三個參數的地址(即& pentry) - - 它不影響readir_r,它無法分辨。但是,當你到達目錄結尾時,它會在pentry中存儲NULL,但是你需要pentry的值來釋放它指向的malloced緩衝區。因此,忘記是否允許使用第二個參數的地址......這樣做是毫無意義的,誤導性的,並導致內存泄漏。
對於readdir_r的規範,請參閱系統 http://www.kernel.org/doc/man-pages/online/pages/man3/readdir.3.html 或 http://pubs.opengroup.org/onlinepubs/009695399/functions/readdir.html
所以我不能使用'readdir_r()'而不使用'malloc()'來執行dirent?或者我可以只傳遞一個指向我的'dirent結構'在堆棧上的指針? –
@Jawsmerc是的,你可以在棧上分配一個'struct dirent'。 d_name成員將有足夠的空間存放長度爲NAME_MAX的路徑。 –
- 1. 具有多個條目具有相同值的JQuery select選項
- 2. 對於具有相同值表
- 3. 具有相同的密鑰和值對
- 4. R-功能% - 不同的結果具有相同參數的
- 5. 是否有可能有2個不同的NSNumber對象具有相同的值?
- 6. LEFT對於相同的值返回不同的結果
- 7. getIntent()getStringExtra(Intent.EXTRA_TEXT)具有相同的結果
- 8. 對不同的結果使用具有相同值的枚舉? C++
- 9. 具有相同條件的聯合結果
- 10. 在表中找到具有相同值的列的條目
- 11. 限制分頁基於具有相同名稱的條目數
- 12. Linq語句爲所有條目返回相同的結果
- 13. 具有相同結果的多個目標名稱?
- 14. 需要幫助將可能或可能不具有相同值但具有相同帳戶的列分組
- 15. PHP總結陣列條目,其中兩個鍵具有相同的值
- 16. 用於查找矢量中具有相同最大值的條目的函數
- 17. 如果所有對象都具有相同的css值,那麼
- 18. 顯示XML數據條目具有相同的節點值
- 19. 在php中計數具有相同值的mysql條目?
- 20. 根據其他具有相同值的條目選擇最新條目?
- 21. 具有相同結構的不同表格獲取結果
- 22. 具有相同等值的組行具有相同的值
- 23. 使用PHP訂購,但一些條目可以具有相同的值
- 24. Python:對象具有相同的值?
- 25. 兩個結構具有相同可變
- 26. 查找具有相同幅度的條目和虛部在Matlab
- 27. R和rbind使不具有相同長度的條目爲零
- 28. 只能選擇具有相同foreign_id條目兩次
- 29. 選擇查詢和相同的查詢具有結果
- 30. 使用事務對於具有相關結果
'男人readdir_r'。 – MYMNeo
當到達目錄結尾時,'readdir_t()'將其'result'參數設置爲'NULL'。如果你用'malloc()'(可能的內存泄漏)分配'entry',請牢記這一點。否則,你可以做你所做的事情,因爲'entry'和'&entry'是按值傳遞給函數的。 –
@MYMNeo:在我的系統上沒有關於它的單獨手冊頁,在'readdir'手冊中沒有提到我的問題。 – thejh