Bir dosya tanıtıcısının aranabilir olup olmadığını belirlemek için (POSIX sistemlerinde) taşınabilir bir yol var mı? Benim düşüncem lseek(fd, 0, SEEK_CUR);
kullanmak ve dönüş değeri -1 olup olmadığını kontrol etmektir, ancak bunun yanlış negatifler veya yanlış pozitifler verebileceğinden emin değilim. fstat
'u kullanarak ve hangi dosya türlerinin aranabilir/seçilemez olmadığına dair varsayımlarda bulunmak iyi bir fikir gibi gelmez. Başka fikirlerin var mı?Bir dosya tanıtıcısının aranabilir olup olmadığı nasıl belirlenir?
cevap
lseek
yöntemi makul görünüyor. Bu kesinlikle yanlış bir olumsuzluğa neden olamaz - eğer yapıldıysa, uygulamada ciddi bir sorun var. Ayrıca, POSIX spec'a göre, tanımlayıcının bir boru, FIFO veya soket olması durumunda başarısız olması, teorik olarak yanlış pozitiflere sahip olmamanız gerekir. Kalan tek soru, farklı sistemlerin özelliklerle ne kadar iyi uyumlu olduğudur. Ancak, başka herhangi bir yöntem, her ne olursa olsun, kesinlikle bundan daha az taşınabilir olacak gibi görünüyor.
Düzenli bir dosya olup olmadığını kontrol etmek için fstat() öğesini, daha sonra da stat yapısının mod alanındaki S_ISREG makrosunu kullanabilirsiniz; Düzenli bir dosya, per definiton, bir "düzenli olmayan" (özel) dosyası olmayabilirken (aynı zamanda aranabilir özel dosyalar olup olmadığını bilmiyorum) aranabilir.
Ancak, lseek() ve errno == ESPIPE öğelerinin dönüş değerlerinin de kontrol edilmesi gerekir. Prensip olarak, the effect of lseek() on devices which are incapable of seeking is implementation-defined, bu yüzden nazal daemonlara dikkat edin.
- 1. NSString'in latin tabanlı olup olmadığı nasıl belirlenir?
- 2. SQL sorgusunun SELECT olup olmadığı nasıl belirlenir?
- 3. Yerel Kopyalama'nın gerekli olup olmadığı nasıl belirlenir
- 4. VFPOLEDB sağlayıcısının yüklü olup olmadığı nasıl belirlenir?
- 5. ServletRequest'in PreflightRequest olup olmadığı nasıl belirlenir?
- 6. UISwitch'in açık/kapalı olup olmadığı nasıl belirlenir?
- 7. Bir yolun başka bir alt dizini olup olmadığı nasıl belirlenir?
- 8. Java'da bir karakterin bir harf olup olmadığı nasıl belirlenir?
- 9. Bir şeyin belirli bir kümenin üyesi olup olmadığı nasıl belirlenir?
- 10. Bir noktanın sınırın üstünde veya altında olup olmadığı nasıl belirlenir?
- 11. Bir derleme zamanında türün lambda ifadesi olup olmadığı nasıl belirlenir?
- 12. C# Bir sayının diğerinin katı olup olmadığı nasıl belirlenir?
- 13. Sınıfın başka bir sınıfın alt sınıfı olup olmadığı nasıl belirlenir?
- 14. Sınıf referansı bir arabirim olup olmadığı nasıl belirlenir?
- 15. Tarihin bir hafta sonu olup olmadığı nasıl belirlenir (lubridate kullanılmıyor)
- 16. Bilgisayarda bir wifi adaptörünün olup olmadığı nasıl belirlenir?
- 17. R'de bir listenin boş olup olmadığı nasıl belirlenir?
- 18. .NET Türünün özel bir yapı olup olmadığı nasıl belirlenir?
- 19. Yerel JavaScript nesnesinin bir özellik/yöntem olup olmadığı nasıl belirlenir?
- 20. Dizenin kullanıcı SID olup olmadığı nasıl belirlenir? Windows İşletim Sisteminde
- 21. .NET derlemesinin GAC'de yüklü olup olmadığı nasıl belirlenir?
- 22. System.Diagnostics.Process dosyasının 32 veya 64 bit olup olmadığı nasıl belirlenir?
- 23. std :: chrono :: monotonic_clock öğesinin kullanılabilir olup olmadığı nasıl belirlenir?
- 24. Tüm satırın boşta olup olmadığı nasıl belirlenir excel vba
- 25. Yükseltme :: varyant değişkeninin boş olup olmadığı nasıl belirlenir?
- 26. Dizenin İngilizce cümle veya kod olup olmadığı nasıl belirlenir?
- 27. ruby / raylar: Modülün dahil olup olmadığı nasıl belirlenir?
- 28. Bir dosya tanıtıcısının herhangi bir verinin mevcut olup olmadığını nasıl kontrol edebilirim?
- 29. Tetikleyicinin geçersiz olup olmadığı nasıl kontrol edilir?
- 30. Oturumun geçersiz olup olmadığı nasıl kontrol edilir
Sabit sürücüler gibi engelleme aygıtları aranabilir. Belki karakter aygıtları bile, ama emin değilim. – Thomas
gerçekten aranamayan bazı cihazlar aramaya cevap vermeyecek (Linux'ta bir başkası, arama yapmakta başarısız oldu ama davranışa bağlı kullanıcı alanlarını keşfetti ...) – Spudd86
Doğru; Bazı karakter aygıt sürücüleri sadece seek() öğesini göz ardı eder ve sessizce geri döner. –