Masalahnya ada pada detailnya... Sebagai permulaan, ada prinsip dasar desain Unix:semuanya adalah file , Dijelaskan dengan baik di sini.
Yang kedua adalah panggilan stat(2) memberi Anda inode statistik yang disimpan di sistem file tentang file khusus perangkat yang memiliki ukuran nol (anggap saja sebagai lstat(2)
). Jika Anda memiliki perangkat blok yang memiliki sistem file di dalamnya, Anda mendapatkan informasi tentangnya menggunakan statfs(2)
atau getfsstat(2)
atau statvfs(2)
dengan sistem file/perangkat yang independen.
Berurusan dengan file khusus (biasanya berada di /dev) selalu khusus untuk sistem dan halaman manual berada di bagian 4. Jadi jika Anda ingin memanipulasi perangkat secara langsung, Anda harus membaca secara spesifik di sana. Misalnya, di Linux man 4 hd
akan menunjukkan kepada Anda bagaimana berinteraksi secara terprogram dengan perangkat blok IDE. Sedangkan man 4 sd
akan memberi Anda cara berinteraksi dengan disk scsi, dll.
Hal ketiga, panggilan sistem tidak seharusnya tidak konsisten dalam fungsinya NOR keterbatasan mereka.
Semoga ini membantu.
dari pertanyaan Unix Stack Exchange ini:
File perangkat bukan file itu sendiri. Mereka adalah antarmuka I/O untuk menggunakan perangkat dalam sistem operasi mirip Unix. Mereka tidak menggunakan ruang pada disk, namun mereka masih menggunakan inode seperti yang dilaporkan oleh perintah stat:
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Itu menyelesaikan stat
bagian.
fakta bahwa Anda dapat mencari di "file" ini tidak terkait. Ini sebenarnya bukan file, tetapi Anda dapat open
dan membaca dari itu. Anda juga bisa mencarinya. Ini memungkinkan untuk membaca disk pada level terendah, jadi pencarian diperlukan (itulah mengapa ini berfungsi, dan mengapa tidak mengembalikan posisi baru seperti file "nyata"?).
Menurut jawaban UnixSE lainnya ini, Anda bisa mendapatkan ukuran perangkat dengan membaca /dev/sda/size
ini berkas.
Panjang "perangkat" seperti /dev/sda
tidak ditentukan oleh POSIX struct stat
:
off_t st_size For regular files, the file size in bytes.
For symbolic links, the length in bytes of the
pathname contained in the symbolic link.
For a shared memory object, the length in bytes.
For a typed memory object, the length in bytes.
For other file types, the use of this field is
unspecified.
Jadi POSIX tidak memiliki persyaratan untuk "ukuran" perangkat disk.
Linux juga tidak menentukan stat()
itu akan mengembalikan ukuran perangkat disk:
st_size
Bidang ini memberikan ukuran file (jika berupa file biasa atau tautan simbolik) dalam byte. Ukuran tautan simbolik adalah panjang nama jalur yang dikandungnya, tanpa byte null terminasi.