GNU/Linux >> Belajar Linux >  >> Linux

Mendapatkan hitungan deskriptor file yang digunakan saat ini dari kode C

Untuk hitungan proses saat ini, Anda dapat menggunakan getrlimit untuk mendapatkan batas deskriptor file, lalu ulangi semua bilangan bulat dari 0 hingga batas tersebut dan coba panggil fcntl dengan F_GETFD memerintah. Ini hanya akan berhasil pada deskriptor file yang benar-benar terbuka, membiarkan Anda menghitungnya.

Edit: Saya sekarang memiliki cara yang lebih baik untuk melakukannya. Setelah mendapatkan rlimit , buat array besar struct pollfd (sebesar batas jika memungkinkan; jika tidak, Anda dapat memecahnya menjadi beberapa proses/panggilan) dengan masing-masing fd dalam rentang dan events anggota disetel ke 0. Panggil poll pada larik dengan batas waktu 0, dan cari POLLNVAL bendera di revents untuk setiap anggota. Ini akan memberi tahu Anda mana di antara kumpulan fd yang berpotensi besar yang tidak valid dengan satu syscall, bukan satu syscall per fd.


Anda dapat membaca /proc/sys/fs/file-nr untuk menemukan jumlah total pegangan sistem file yang dialokasikan dan gratis serta jumlah maksimum yang diizinkan.

[[email protected] proc]# cat /proc/sys/fs/file-nr
3853    908     53182
|       |       |
|       |       |
|       |       max: maximum open file descriptors
|       free: total free allocated file descriptors
allocated: total allocated file descriptors since boot

Untuk menghitung angka yang sedang digunakan, cukup lakukan allocated - free . Anda juga dapat menghitung persentase deskriptor yang digunakan dengan melakukan ((allocated - free) / max) * 100

Mengenai per proses, saya tidak yakin apakah ada cara terprogram yang dapat Anda lakukan.

Berikut tutorial tentang cara melakukannya dengan lsof pokoknya:http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html


Karena Anda mengatakan Anda menggunakan Linux, Anda dapat membuka folder /proc/self/fd/ yang harus berisi tautan simbolis ke semua deskriptor file yang terbuka .


Linux
  1. Deskriptor File &Skrip Shell?

  2. Ekstrak Triple Backtick Feced Code Block “` Kutipan Dari File Penurunan Harga?

  3. Bagaimana Mencegah Log Menjadi Terlalu Besar?

  1. Hitung baris, kata, dan karakter dari file di Linux

  2. Utas dan deskriptor file

  3. Bagaimana cara membuat file di Linux dari jendela terminal?

  1. Hitung baris dalam file besar

  2. Buat PEM dari file PPK

  3. Bagaimana install -c berbeda dari cp