Pengaturcaraan C

POSIX Spawn dengan Pengaturcaraan C

POSIX Spawn dengan Pengaturcaraan C
Spawn adalah fungsi yang digunakan dalam POSIX untuk memuat dan melaksanakan proses anak. Proses yang sedang berjalan di POSIX kemudiannya akan berlanjutan atau tidak akan terus menjalankan proses anak ini dan proses lain secara tidak segerak. Setiap kali sub-proses baru dibuat, memerlukan memori tertentu yang akan membolehkan proses ibu bapa dan anak dijalankan. Di Microsoft Windows, UNIX, dan Linux, terdapat keluarga spawn tertentu; dan keluarga fungsi spawn yang lain dianggap sebagai pilihan tambahan.

Mengapa Menggunakan POSIX Spawn?

The posix_spawn () dan posix_spawnp () fungsi kedua-duanya digunakan untuk membuat proses anak baru. Proses kanak-kanak kemudian melaksanakan fail. Fungsi-fungsi ini ditentukan oleh POSIX untuk menyeragamkan kaedah membuat proses baru untuk mesin yang tidak mempunyai sokongan panggilan sistem garpu. Mesin ini biasanya kecil dan tidak mempunyai sistem tertanam untuk sokongan lMMU.

Kedua-dua fungsi menggabungkan garpu dan eksekusi, dengan beberapa langkah tambahan yang akan melaksanakan anak. Mereka bertindak sebagai subset fungsi, biasanya dicapai dengan garpu, untuk semua panggilan sistem dan sistem tertanam yang kekurangan fungsi tersebut.

Contoh 1: posix_spawn ()

Dalam contoh ini, kita akan menggunakan fungsi spawn () untuk membuat dan melaksanakan proses anak baru. Kemudian, kami akan menerangkan semua argumen yang relevan yang digunakan dalam fungsi tersebut.

Argumen yang digunakan dalam contoh adalah seperti berikut:

Hujah Penerangan
Digunakan untuk menentukan semua operasi yang dilakukan secara bertelur.
jalan Nama jalan yang akan dilaksanakan.
fd_kira Bilangan penyertaan dengan susunan fd_map. Sekiranya fd_count sama dengan 0, maka fd_map diabaikan. Dalam kes sedemikian, proses anak mewarisi semua deskriptor fail, mengabaikan yang telah diubah.
fd_map
Pelbagai deskriptor fail akan diwarisi oleh proses anak. Di sini, jika nilai fd_count tidak 0, maka fd_map diperlukan untuk membawa deskriptor fail fd_count hingga nilai tertinggi OPEN_MAX. Ia mempunyai:

· Input proses anak

· Hasilnya

· Nilai ralat

mewarisi Pewarisan struktur menunjukkan bahawa pengguna mahu proses anak mereka mewarisi segala-galanya daripada ibu bapa.
berhujah Penunjuk ke vektor argumen tertentu. Nilai argv [0] tidak boleh NULL dan mestilah nama fail yang sedang dimuat. Nilai argv tidak boleh sama dengan NULL.
envp Menunjuk kepada pelbagai penunjuk watak. Setiap pointer dalam array ini menunjukkan pemboleh ubah persekitaran. Titik penamat array ialah penunjuk NULL.

Contoh 2: ujian.c

Dalam contoh berikut, proses anak baru dibuat untuk menjalankan perintah oleh / bin / sh -c. Ini adalah nilai yang dilalui sebagai hujah pertama. The ujian.c kod adalah seperti berikut:

Dalam contoh di atas, kami memanggil perpustakaan, kemudian disebut bertelur.h kepala. Anda juga akan melihat posix_spawn () dipanggil untuk membuat proses anak dalam contoh di atas. The bertelur dan spawnp fungsi digunakan di tempat garpu dan exec fungsi. Bertelur () mempunyai fleksibiliti dan memberikan banyak kemudahan kepada pengguna dalam pelbagai cara. Ia agak berbeza dari sistem () dan exec (). Ia akan kembali dan mewujudkan proses anak segar. Dalam contoh kita, ia adalah pid. Di atas, anda dapat melihat bahawa fungsi menunggu ruang tunggu (), kemudian sistem () digunakan. Perhatikan bahawa bertelur () dan garpu () proses panggilan adalah sama, dan kaedah pelaksanaannya lebih kurang sama untuk kedua fungsi tersebut.

Kami sekarang akan melaksanakan contoh menggunakan a gcc penyusun. Anda juga boleh menggunakan penyusun lain pilihan anda:

ujian $ sudo gcc.c -lrt

Seterusnya, jalankan yang berikut:

$ ./ a.keluar

Keluaran arahan di atas akan kelihatan seperti berikut:

Kanak-kanak itu pid akan dibuat, seperti yang anda lihat dalam output di atas.

Perpustakaan

Libc: Gunakan -l c untuk memautkan gcc penyusun. Di sini, perhatikan bahawa perpustakaan ini disertakan secara automatik.

Bertelur ()

The bertelur () fungsi berdasarkan POSIX 1003.Draf standard 1d digunakan sebagai posix_spawn (). Perpustakaan C merangkumi fungsi spawn * (). Di sini, kami akan menyenaraikan beberapa akhiran, bersama dengan keterangannya:

e: digunakan sebagai larik untuk pemboleh ubah persekitaran.

l: digunakan sebagai senarai argumen yang dihentikan NULL yang digunakan di dalam program.

p: digunakan untuk menentukan jalan relatif. Sekiranya jalan tidak mempunyai garis miring nilainya, maka sistem menggunakan dan mencari pemboleh ubah persekitaran PATH untuk program serupa.

v: bertindak sebagai vektor hujah di dalam program.

Pemetaan Fail Pemetaan

Dalam bertelur (), kami mengamalkan fd_kira dan fd_map hujah untuk memanggil deskriptor fail. Ia menentukan anak mana yang akan diwarisi.

Nombor yang digunakan sebagai deskriptor file untuk proses anak bergantung pada lokasinya di dalam fd_map. Di sini, kita akan mempertimbangkan contoh ibu bapa dengan deskriptor fail bernilai 1, 3 dan 5, maka pemetaan akan menjadi seperti ini:

>> int fd_map = 1, 3, 5;
Untuk anak Untuk ibu bapa
0 1
1 3
2 5

Perhatikan bahawa jika anda menggunakan yang tersurat fd_map untuk memadankan deskriptor fail ini dengan anak dan ibu bapa, maka anda mesti memetakan SPWAN_FDCLOSE berfungsi untuk meneruskan.

Bendera Warisan

Di Spawn, pengguna perlu memanggil salah satu bendera berikut sekiranya berlaku pewarisan. Beberapa contoh bendera Spawn dan keterangannya diberikan di bawah:

Bendera Penerangan
SPAWN_ALIGN_DEFAULT Bendera ini digunakan untuk mengatur tetapan lalai penyediaan untuk penjajaran.
SPAWN_ALIGN_FAULT Bendera ini digunakan untuk kesalahan penyelarasan rujukan data.
SPAWN_ALIGN_NOFAULT Bendera ini digunakan untuk memperbaiki kesalahan penyelarasan kesalahan.
SPAWN_DEBUG Bendera ini digunakan untuk men-debug kernel.
SPAWN_EXEC SPAWN bertindak seperti exec * () menggunakan bendera ini.
SPAWN_EXPLICIT_CPU Bendera ini digunakan untuk menetapkan topeng lari dan mewarisi topeng = anggota topeng lari.
SPAWN_EXPLICIT_SCHED Bendera ini digunakan untuk menetapkan polisi penjadualan.

The <bertelur.h> mentakrifkan topeng itu SPAWN_ALIGN_MASK digunakan untuk menyelaraskan bendera yang tertera di atas.

kumpulan pid_t Kumpulan proses anak jika anda menentukan SPAWN_SETGROUP pada anggota bendera.
int runmask Runmask proses anak mewarisi topeng yang dipersetujui berdasarkan nilai anggota ini.
sigset_t sigmask Topeng isyarat untuk proses anak yang digunakan untuk menentukan status anggota bendera.
sigset_t sigdefault Kumpulan proses kanak-kanak dari isyarat lalai.

Kesalahan

The posix_spawn () dan posix_spawnp () fungsi juga boleh gagal dalam beberapa kes, seperti berikut:

EINVAL: Ini adalah kes apabila nilai yang dikenal pasti oleh fail_aksi atau attrp tidak betul dan mencukupi.

Apabila panggilan garpu (2), garpu (2), atau klon (2) gagal, maka bertelur () fungsi akan mengembalikan nombor ralat.

ENOSYS: Ini berlaku sekiranya fungsi dan sokongannya tidak disertakan atau disediakan dalam sistem.

Kesimpulannya

Tutorial ini merangkumi fungsi asas yang disediakan oleh POSIX_spawn () dan fungsi yang digunakan untuk melaksanakan dan melaksanakan fungsinya. Kami juga merangkumi bendera dan kesalahan yang biasa digunakan oleh Spawn.

Kajian Tetikus Tanpa Wayar Microsoft Sculpt Touch
Saya baru-baru ini membaca mengenai Sentuhan Microsoft Sculpt tetikus tanpa wayar dan memutuskan untuk membelinya. Setelah menggunakannya sebentar, sa...
Trackpad dan Mouse Pointer pada skrin Windows AppyMouse untuk Tablet Windows
Pengguna tablet sering kehilangan penunjuk tetikus, terutama ketika mereka biasa menggunakan komputer riba. Telefon pintar dan tablet skrin sentuh dil...
Butang tetikus tengah tidak berfungsi pada Windows 10
The butang tetikus tengah membantu anda menelusuri halaman web dan skrin yang panjang dengan banyak data. Sekiranya ia berhenti, anda akan menggunakan...