open()
Bir dosya oluşturmanın ve küçülmesinin bir yolu var mı ? Tabii ki, onları ekleme modunda açabilir veya sonuna kadar arayabilir ve büyümelerine neden olmak için yazabilir. Ancak, bildiğim kadarıyla, tipik unix tarzı sistem çağrı arabirimleri yoluyla bir dosyayı küçültmenin bir yöntemi yoktur.
Bunu yapmanın tek yolu, bildiğim kadarıyla, yeni ve daha kısa bir dosya oluşturarak ve daha eskisinin yerine taklit rename()
etmektir.
Sadece onaylamak istedim, çünkü yeni bir dosya oluşturma ve yerine yeniden adlandırma işlemi yapmak yerine doğrudan bir dosya üzerinde çalışan dosya editörleri yapmanın mümkün olduğunu ima eden bir cevap gördüm.
Her zaman libc ve unix tarzı sistem çağrısı arayüzlerindeki api dosyasının, dosya sistemlerinin uygulanmasını kolaylaştırmak ve parçalanmaya katkıda bulunabilecek kullanım kalıplarından kaçınmak için dosyaların küçülmesine izin vermediğini düşündüm.
open()
ve openat()
zaten kısaltılması için bir bayrağı var, O_TRUNC
bu yüzden teknik olarak inode değiştirmeden dosyanın küçülmesine, yani tamamen küçülmesine neden oluyor. Bunun en ünlü örneği, command > file.txt
eğer varsa dosyanın kesileceği yerdir. Eğer çalıştırırsanız strace
üzerinde bash -c 'true > /dev/null'
size göreceksiniz openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666)
çıktıda. Tabii ki değişken boyutta truncate()
kesim için sistem aramasına ihtiyacınız var . Bunu yorum yerine gerçek bir cevap olarak istiyorsanız bana bildirin.
fopen
"W" (veya "w +") modunda bir dosyayı açmak dosyayı otomatik olarak sıfır uzunluğa indirecektir. Yoksa eski içeriğin bir kısmını korumak için sıfır olmayan bir boyuta küçültmek mi demek istediniz?