相關文章:Delete folder with items指向struct的指針比指定更多?
如何使指針數組中的指針可用於比指定更多的指針?對於ftw/ftwn的學習工具,我重寫了ftwn相關文章(上面)中的ftwn解決方案。基本上使用ftw回調來填充包含文件名,每個文件的類型和深度的結構數組。然後,文件刪除從maxdepth開始,直到刪除文件,然後沿途刪除目錄。這是一個測試,所以printf
顯示unlink
或rmdir
應該被調用,刪除命令永遠不會執行。
結構數組的存儲嘗試了3種不同的方式。 (1)靜態指定可用指針的數量struct _rmstat *rmstat [100];
(ftw'nopenfd'設置爲200),(2)動態分配struct _rmstat **rmstat;
,最後(3)將信息添加到鏈接列表。測試靜態分配時,我專門選擇了少於100個文件的測試目錄,然後使用多於100個文件的目錄,導致失敗。
令我驚訝的是,靜態分配的測試會定期處理包含超過100個文件的目錄,最多可達450個!這怎麼可能?我認爲靜態分配struct _rmstat *rmstat [100];
應該保證在嘗試101st結構分配時發生段錯誤(或類似的核心轉儲)。在堆棧/堆分配中,gcc中是否有這樣的功能?或者,這只是「未定義」行爲的一部分嗎?與ftw,我設置'nopenfd'大於可用的結構指針,所以我不認爲這是ftw限制文件描述符和關閉/重新打開文件的結果。
我已經搜索,但找不到解釋如何得到比指定更多的指針。這裏有人知道這會發生嗎?
該test program source可用。 它是安全的 - 它刪除任何東西,只是與printf
打印。搭建:gcc -Wall -o rmftws rmdir-ftw-static.c
感謝您提供的任何見解。
相關:http://stackoverflow.com/q/2397984/951890 –