Di Linux, fius merujuk kepada sistem fail ruang pengguna dan merupakan modul kernel yang digunakan untuk menyokong sistem fail ruang pengguna ialah rangka kerja sistem fail yang dilaksanakan dalam ruang pengguna modul kernel, gunakan Pengarang hanya perlu melaksanakan operasi fail tertentu mengikut antara muka yang disediakan oleh fius untuk melaksanakan sistem fail.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
Apakah fius linux
Modul kernel yang digunakan oleh Linux untuk menyokong sistem fail ruang pengguna dipanggil FUSE , istilah FUSE kadangkala merujuk secara khusus kepada sistem fail ruang pengguna di bawah Linux.
ialah bahagian penting dalam sistem pengendalian umum. Sistem pengendalian secara tradisinya menyediakan sokongan untuk sistem fail pada peringkat kernel. Secara amnya, kod mod kernel sukar untuk dinyahpepijat dan mempunyai produktiviti yang rendah.
Linux menyokong pelaksanaan sistem fail dalam ruang pengguna melalui modul FUSE bermula dari versi 2.6.14.
Melaksanakan sistem fail dalam ruang pengguna boleh meningkatkan produktiviti dan memudahkan beban kerja menyediakan sistem fail baharu untuk sistem pengendalian Ia amat sesuai untuk pelbagai sistem fail maya dan sistem fail rangkaian. ZFS dan glusterfs yang disebutkan di atas adalah kedua-dua sistem fail rangkaian. Walau bagaimanapun, melaksanakan sistem fail dalam mod pengguna pasti akan memperkenalkan overhed tambahan yang disebabkan oleh mod kernel/pensuisan mod pengguna, yang akan memberi kesan tertentu ke atas prestasi.
Fungsi utama fius: Pantau perubahan dalam fail atau folder dan tambah maklumat tersuai pada perkara yang ditulis atau dibaca oleh proses lain dalam folder atau fail ini.
Ringkasan:
FUSE (sistem fail mod pengguna) ialah rangka kerja sistem fail yang dilaksanakan dalam ruang pengguna Dengan sokongan modul kernel FUSE, pengguna hanya perlu The antara muka yang disediakan oleh fius melaksanakan operasi fail khusus untuk melaksanakan sistem fail.
FUSE terdiri daripada tiga bahagian, modul kernel FUSE, perpustakaan FUSE dan beberapa alatan gantung. Modul kernel FUSE melaksanakan dok dengan VFS Ia kelihatan seperti modul sistem fail biasa Selain itu, modul kernel FUSE melaksanakan peranti yang boleh dibuka oleh proses ruang pengguna Apabila VFS menghantar permintaan operasi fail ke dalam format tertentu dan hantar ke proses ruang pengguna melalui peranti Selepas memproses permintaan, proses ruang pengguna mengembalikan hasilnya kepada modul kernel FUSE Modul kernel kemudian memulihkannya kepada format yang diperlukan oleh Kernel Linux kepada VFS.
Pustaka FUSE bertanggungjawab untuk berkomunikasi dengan ruang kernel Ia menerima permintaan daripada /dev/fuse, menukarnya kepada satu siri panggilan fungsi dan menulis semula hasilnya. kepada /dev/fuse.
operasi_fius struct {
int (*getattr) (const char *, struct stat *, struct fuse_file_info *fi);
int (*readlink) (const char *, char *, size_t);
int (*mknod) (const char *, mode_t, dev_t);
int (*mkdir) (const char *, mode_t);
int (*nyahpaut) (const char *);
int (*rmdir) (const char *);
int (*symlink) (const char *, const char *);
int ( *namakan semula) (const char *, const char *, unsigned int);
int (*pautan) (const char *, const char *);
int (*chmod) (const char *, mode_t, struct fuse_file_info *fi);
int (*chown) (const char *, uid_t, gid_t, struct fuse_file_info *fi);
int (*truncate) (const char *, off_t, struct fuse_file_info *fi);
int (*open) (const char *, struct fuse_file_info *);
int (*read) (const char *, char * , size_t, off_t, struct fuse_file_info *);
int (*write) (const char *, const char *, size_t, off_t, struct fuse_file_info *);
int (*statfs) (const char *, struct statvfs *);
int (*flush) (const char *, struct fuse_file_info *);
int (*release) (const char *, struct fuse_file_info *);
int (*fsync) (const char *, int, struct fuse_file_info *);
setxattr) (const char *, const char *, const char *, size_t, int);
int (*getxattr) (const char *, const char *, char *, size_t);
int (*listxattr) (const char *, char *, size_t);
int (*removexattr) (const char *, const char *);
(const char *, struct fuse_file_info *);
int (*readdir) (const char *, void *, fuse_fill_dir_t, off_t,
struct fuse_file_info_read *, enum fuse_file_infos_read *, enum fuse_file_infos_read *, enum fuse_file_infos_read *, 🎜
int (*releasedir) (const char *, struct fuse_file_info *); int (*fsyncdir) (const char *, int, struct fuse_file_info *);(init) (struct fuse_conn_info *conn,struct fuse_config *cfg);
void (*musnahkan) (void *); int (*access) (const char * , int); int (*cipta) (const char *, mode_t, struct fuse_file_info *); int (*lock) (const char *, struct fuse_file_info *, int cmd, int cmd struct flock *); int (*utimens) (const char *, const struct timespec tv[2], struct fuse_file_info *fi); int (*bmap) (const char * , size_t blocksize, uint64_t *idx); int (*ioctl) (const char *, int cmd, void *arg, struct fuse_file_info *), unsigned int *bendera * ; int (*poll) (const char *, struct fuse_file_info *, struct fuse_pollhandle *ph, unsigned *reventsp);( char *, struct fuse_bufvec *buf, off_t off,struct fuse_file_info *);
int (*read_buf) (const char *, struct fuse_bufvec **bufp,
t_t off, saiz dimatikan struct fuse_file_info *);
int (*flock) (const char *, struct fuse_file_info *, int op);
int (*fallocate) (const char *, int_, off_t, ,struct fuse_file_info *);
};
fius库编译(1)./ configure --prefix=/usr
(2)make
(3)make install
2.加载驱动
加“潽坡 fuse.ko fius modprobe”,然后在切换到example目录下编译fusexmp.c
内核源码解析(3) fuse_sysfs_init (); 在/sys/fs目录下增加fuse节点,在fuse节点下增加connections节点。
(4)fuse_ctl_init(); Fius gt;
(1)fuse_ctl_cleanup(); 注销fius控制文件系统
(2)fuse_sysfs_cleanup(); 移除fius、connections节点。
(3)fuse_fs_cleanup(); 注销fius文件系统,释放fius_inode高速缓存。
(4)fuse_dev_cleanup(); 注销fius设备驱动程序,释放fuse_req高速缓存。
3. fuse_conn
4. Medan bersambung fuse_conn digunakan untuk menunjukkan status sambungan Ia adalah 1 selepas berjaya dipasang Apabila sistem fail dinyahlekap, sambungan terganggu atau pemacu peranti dilepaskan, medan ialah 0. Pada masa ini Sambungan ini (sistem fail dipasang) tidak dapat menyediakan perkhidmatan biasa. Medan ini akan diperiksa dalam fuse_request_send, dan permintaan akan dihantar hanya apabila sistem fail fius biasa disambungkan. Setiap permintaan dalam fius diwakili oleh struktur fuse_req
6. Parameter input dan output bagi setiap fius menyokong tiga parameter Lihat definisi struktur fius_masuk dan_keluar
7. Selepas sistem fail fius menetapkan parameter input dan output permintaan, semua antara muka akhirnya akan memanggil fuse_request_send untuk menetapkan bendera status struktur fuse_req yang mewakili permintaan ini kepada FUSE_REQ_PENDING, dan menambah permintaan kepada tertunda yang belum selesai. senarai fuse_conn , dan panggil request_wait_answer untuk menunggu permintaan selesai (selepas baris gilir menunggu dibangkitkan, anda perlu menyemak sama ada status permintaan adalah FUSE_REQ_FINISHED). Apabila permintaan ini dijawab, hasilnya telah disimpan dalam pembolehubah tempatan outarg, dan fius melakukan pemprosesan yang sepadan untuk mengembalikan hasil ke lapisan atas.
8. Setiap struktur fuse_req permintaan mengandungi medan waitq bagi wait_queue_head_t Selepas setiap permintaan dikeluarkan, ia akan membangkitkan baris gilir menunggu fuse_conn dan memberitahu daemon mod pengguna bahawa permintaan telah tiba; akan Wait_event_interruptible akan dipanggil untuk tidur pada waitq req dan menunggu keadaan FUSE_REQ_FINISHED menjadi benar.
9. Pemacu peranti fius ialah pemacu peranti blok mudah, digunakan oleh fius untuk menukar data antara mod pengguna dan mod kernel mengandungi daemon ruang pengguna, yang berfungsi dalam satu gelung baca untuk membaca permintaan daripada peranti fius apabila tiada permintaan, ia akan tidur dan menunggu pada masa tunggu fuse_conn (sepadan dengan baris gilir menunggu fuse_conn yang terjaga selepas permintaan dikeluarkan dalam perenggan sebelumnya terdapat permintaan, ia akan menunggu dari baris gilir pengding fuse_conn Keluarkan permintaan pertama (sepadan dengan senarai terpaut yang belum selesai ditambah ke fuse_conn selepas permintaan dalam perenggan sebelumnya), dan alihkan permintaan ke baris gilir daemon membaca maklumat fuse_req yang berkaitan ke dalam keadaan pengguna, ia memanggil pengguna mengikut permintaan yang dilaksanakan oleh fungsi panggil balik, dan menulis hasilnya kepada pemacu peranti fius melalui fuse_dev_write Selepas permintaan keadaan pengguna selesai, cari fuse_req yang sepadan daripada baris gilir pemprosesan, salin hasilnya ke parameter keluar fuse_req, dan tetapkan keadaan fuse_req kepada FUSE_REQ_FINISHED , dan kemudian bangunkan waitq fuse_req. Pada ketika ini, fuse_req diproses dan sistem fail fius kembali ke lapisan atas.
Cadangan berkaitan: "
Tutorial Video LinuxAtas ialah kandungan terperinci apa itu fius linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!