Pengaturcaraan C

Isyarat POSIX dengan Pengaturcaraan C

Isyarat POSIX dengan Pengaturcaraan C
Kami mungkin mendefinisikan isyarat sebagai aktiviti yang dipicu untuk mengingatkan operasi atau utas setiap kali waktu kedatangan untuk situasi penting tertentu. Setiap kali prosedur atau utas mengakui isyarat, prosedur atau utas akan menghentikan apa sahaja yang dilakukan dan mengambil tindakan segera. Dalam koordinasi antara proses, isyarat dapat berkesan. Dalam panduan ini, anda akan mempelajari pengendali isyarat di Linux melalui bahasa C.

Isyarat Piawai atau Biasa:

Isyarat fail pengepala.h 'mempunyai isyarat yang dinyatakan di dalamnya sebagai pemalar makro. Tajuk isyarat bermula dengan "SIG" dan didahului dengan gambaran keseluruhan isyarat ringkas. Oleh itu, sebarang isyarat mempunyai nilai angka yang berbeza. Kod program harus menggunakan nama isyarat, bukan beberapa isyarat. Sebab di sebalik itu adalah bahawa bilangan isyarat boleh berbeza-beza bergantung pada sistem, tetapi tafsiran nama adalah standard. Berikut adalah beberapa isyarat biasa dengan fungsi mereka ditentukan.

PENAMPILAN:

Isyarat ini akan menghentikan proses. Sinyal SIGHUP dikeluarkan untuk menunjukkan pemisahan terminal pengguna, mungkin kerana komunikasi jarak jauh terputus atau menutup.

TANDATANGAN:

Ia akan mengganggu prosesnya. Isyarat SIGINT diterima setiap kali pengguna memasukkan kunci INTR (biasanya Ctrl + C).

TANDA:

Ia akan menghentikan atau keluar dari pemprosesan. Isyarat SIGQUIT diterima setiap kali pengguna memasukkan kekunci QUIT (biasanya Ctrl + \).

SIGILL:

Ia berjalan apabila arahan haram telah dibuat. Isyarat SIGILL dibuat setiap kali usaha dilakukan untuk melakukan perintah sampah atau hak istimewa. Apabila tumpukan melimpah dan mesin menghadapi masalah menjalankan pengawal isyarat, SIGILL juga boleh dibuat.

TANDATANGAN:

Ini disebut ketika beberapa instruksi trap trap sedang dijalankan. Isyarat SIGTRAP dibuat oleh perintah breakpoint dan perintah perangkap lain. Debugger menggunakan isyarat sedemikian.

SIGABRT:

Ia dipanggil isyarat Abort. Isyarat SIGABRT dibuat dengan memanggil kaedah batalkan (). Isyarat sedemikian digunakan untuk menunjukkan ketidaktepatan yang diperhatikan oleh kod yang disebutkan di atas dan direkodkan oleh panggilan kaedah batalkan ().

TANDA:

Pengecualian untuk titik terapung; Isyarat SIGFPE dihasilkan apabila berlaku ralat matematik bencana.

SIGUSR1 dan SIGUSR2:

Isyarat SIGUSR1 dan SIGUSR2 boleh digunakan dengan cara yang anda suka. Adalah bermanfaat bagi interaksi proses yang mudah untuk membuat pengendali isyarat untuk isyarat sedemikian dalam aplikasi yang mendapat isyarat.

Kelakuan Isyarat Lalai:

Terdapat tingkah laku atau tindakan standard untuk setiap isyarat, dan mungkin untuk menyesuaikan tingkah laku lalai menggunakan fungsi pengendali. Tingkah laku isyarat SIGKILL dan SIGABRT automatik tidak dapat diubah atau diabaikan.

Tempoh: Ia akan menghentikan operasi.

Teras: Dokumen pembuangan teras akan dihasilkan, dan operasi akan dihentikan.

Ign: Prosesnya akan mengabaikan isyarat.

Berhenti: Ia akan menghentikan operasi.

Sambungan: Operasi ini akan berterusan daripada dihentikan.

Pengendalian Isyarat:

Proses ini mempunyai pilihan tingkah laku untuk isyarat apabila diakui. Prosesnya mungkin berlaku seperti berikut:

Isyarat secara automatik dikeluarkan apabila tingkah laku isyarat yang ditentukan diabaikan.

Dengan menggunakan kaedah seperti isyarat atau sigaction, kod tersebut dapat mendaftarkan fungsi pengendali. Ia dipanggil menangkap isyarat dari pengendali.

Sekiranya isyarat tidak diperlakukan atau diabaikan, tindakan standard mungkin berlaku.

Anda boleh menentukan fungsi Pengendalian Isyarat sebagai:

$ Int signal () int signum, batal (* funk) (int))

Apabila pemprosesan memperoleh signum isyarat, kaedah signal () boleh memanggil kaedah 'func'. Isyarat () mengembalikan penunjuk ke kaedah 'func' jika berjaya atau pengecualian dikembalikan ke errno dan -1 sebagai gantinya.

Penunjuk 'func' mampu mempunyai tiga nilai:

SIG_DFL: Ini adalah petunjuk kepada kaedah SIG DFL () standard, yang ditentukan dalam tajuk.h dokumen yang digunakan untuk mendapatkan tingkah laku standard isyarat.

TANDA: Ini adalah rujukan kepada kaedah abaikan SIG IGN (), yang dinyatakan dalam tajuk.h dokumen.

Penunjuk kaedah pengendali yang ditentukan pengguna: Kaedah pengendali yang ditentukan pengguna jenis tidak sah (*) (int), menunjukkan bahawa kategori pengembalian adalah tidak sah dan bahawa hujah bersendirian adalah int.

Buat isyarat fail baru.c 'dan tuliskan kod pengendali isyarat di bawahnya.

Pautkan isyarat.c fail dengan gcc.

Semasa menjalankan isyarat.c file, kami mempunyai gelung tanpa henti yang dijalankan dalam kaedah utama. Pada menekan CTRL + C, ia memulakan kaedah pengendali, dan pelaksanaan kaedah utama berhenti. Pemprosesan kaedah utama diteruskan setelah pencapaian kaedah pengendali. Setelah menekan Ctrl + \, operasi berhenti.

Isyarat Abaikan:

Untuk mengabaikan isyarat, buat isyarat fail.c 'dan tuliskan kod di bawahnya.

Ikat abaikan.c fail dengan gcc.

Jalankan isyarat.fail c. Ketik CTRL + C, isyarat TANDA dibuat; namun demikian, tingkah laku itu tidak disedari kerana kaedah pengendali dihitung dengan kaedah SIG_IGN ().

Pengendali Isyarat Pendaftaran Semula:

Untuk mendaftarkan semula pengendali isyarat, buat fail baru 'rereg.c 'dan tuliskan kod di bawahnya:

Kaitkan rereg.c fail dengan gcc.

Jalankan pembacaan semula.fail c. Semasa pertama kali menekan kaedah pengendali CTRL + C dinaikkan, dan pengendali isyarat mendaftar semula ke SIG_DFL. Sambil menekan CTRL + C sekali lagi, pelaksanaannya dihentikan.

Hantar Isyarat Menggunakan Naik ():

Buat fail 'hantar.c 'dan tambahkan kod di bawah. Untuk menghantar isyarat ke kaedah panggilan, kaedah kenaikan () digunakan.

Kaitkan kiriman.c fail dengan gcc.

Proses ini menggunakan kaedah kenaikan () untuk menghantar isyarat SIGUSR1 dengan sendirinya.

Hantar Isyarat Menggunakan Bunuh ():

Tambahkan kod di bawah dalam 'kenaikan.c '. Gunakan kaedah kill () untuk menghantar isyarat ke kumpulan proses.

Hubungkan kenaikan.c fail dengan gcc.

Dengan menggunakan kaedah kill (), proses mengarahkan isyarat SIGUSR1 ke yang disebutkan di atas.

Interaksi Ibu Bapa-Anak:

Untuk menonton interaksi ibu bapa-anak, tulis kod di bawah dalam fail.

Ikut comm.c fail dengan gcc.

Fork () / kaedah menghasilkan anak, mengembalikan sifar ke proses anak, dan ID anak kepada ibu bapa.

Kesimpulan:

Dalam panduan ini, kami telah melihat bagaimana membuat, menangani, mengirim, mengabaikan, mendaftar semula dan menggunakan isyarat untuk interaksi antara proses di Linux.

Cara menukar butang tetikus Kiri & Kanan pada PC Windows 10
Sudah menjadi kebiasaan bahawa semua peranti tetikus komputer dirancang secara ergonomik untuk pengguna tangan kanan. Tetapi ada peranti tetikus yang ...
Tiru klik Tetikus dengan melayang menggunakan Mouse Tanpa Klik di Windows 10
Menggunakan tetikus atau papan kekunci dalam keadaan salah penggunaan berlebihan boleh menyebabkan banyak masalah kesihatan, termasuk ketegangan, sind...
Tambahkan isyarat Tetikus ke Windows 10 menggunakan alat percuma ini
Dalam beberapa tahun kebelakangan ini komputer dan sistem operasi telah banyak berkembang. Ada saat ketika pengguna harus menggunakan perintah untuk m...