Pengekodan dengan garpu dan contoh dengan contoh di c

Coding With Fork Exec Example C



Tajuk artikel kami mengandungi dua fungsi berbeza dari bahasa C yang berlaku semasa menjalankan sebarang program dalam sistem kami. Sayangnya, tidak ada kemungkinan terjadi lebih dari satu program pada satu masa di C. Hanya satu tugas yang dapat berlaku pada waktu tertentu, yang bermaksud tidak membenarkan program berjalan secara bersamaan. Ini menyebabkan anda menunggu penyelesaian satu proses untuk melaksanakan proses yang lain. Untuk mengelakkan masalah mengatasi masalah ini, anda mungkin perlu mengembangkan program anda dengan cara yang baik, menjadi pembangun yang baik. Linux fork () digunakan untuk mengatasi penantian dan untuk membenarkan kesesuaian dalam sistem anda. Ini membantu dalam mendua proses baru dan membuat proses baru dengan memanggil proses pendua. Proses baru adalah proses anak, dan proses sebelumnya disebut proses ibu bapa.

Manakala, fungsi exec () digunakan untuk mengubah program yang ada sekarang dengan yang baru. Penggantian ini dilakukan dengan membuat pindaan terhadap kandungan program atau fail. Jadi perbezaan antara garpu dan exec adalah bahawa garpu membuat proses baru dari proses yang ada, dan exec digunakan untuk menggantikan program yang ada dengan membuat yang baru.







Prasyarat

Untuk melaksanakan program c pada sistem Linux anda, kita perlu memasang beberapa prasyarat di atasnya. Pergi ke terminal dengan menggunakan kaedah pintasan Ctrl + Alt + T. Sekarang tulis arahan berikut untuk memasang halaman manual.



$sudotepatpasangmanpages-dev



Ia akan memasang semua halaman yang sesuai.





Melangkah ke hadapan, untuk menjalankan program di Linux, anda perlu memasang penyusun kod. Itu digunakan untuk menyusun kod dan melaksanakannya. Untuk tujuan ini, kami akan memasang repositori GCC dalam sistem kami.

$sudotepatpasangGCC



Pengekodan dengan exec di c

Semasa kami memasang halaman manual di Linux, kami akan menggunakan perintah berikut untuk melihat keterangan mengenai exec. Sintaks sampel utama adalah seperti berikut:

Sintaks

Cth(nama jalan/fail, argv);

Di sini kami telah menggunakan header unistd.h kerana mengandungi semua maklumat mengenai keluarga yang mempunyai fungsi exec.

$lelaki exec

Sekarang dalam gambar yang disebutkan di atas, anda dapat melihat jenis exec. Ini adalah keluarga fungsi exec. Masing-masing untuk fungsi yang berbeza mengikuti asas yang sama, exec.

Contoh: Sekarang, kita akan menerangkan fungsi exec dengan bantuan contoh. Kami akan menggunakan satu fungsi exec untuk menunjukkan kerjanya, iaitu execv. Pertama, kita akan membuat dua fail dengan lanjutan .c. Setelah dibuat, kami akan menulis kod masing-masing di dalamnya dan melaksanakannya untuk melihat hasilnya.

Pertimbangkan contoh nama fail4.c. Sila buka dan gunakan kod berikut. Dalam kod ini, kami telah menggunakan execv dengan cara tertentu yang disebutkan di bawah.

Eksekutif(./sample4copy, berhujah);

Bahagian pertama mengandungi jalur direktori baru, dan bahagian kedua menunjukkan array argumen sebagai parameter yang telah kami lalui.

Contoh4.c

Pertama sekali, kami telah mencetak id proses semasa. Kedua, kami telah membuat array watak yang mempunyai NULL pada akhirnya untuk penamatan. Ketiga, kami memanggil fungsi sample4copy.

Contoh4copy.c

Apabila kita memanggil fungsi exec (), gambar proses diubah. Gambar yang dipetik di bawah menunjukkan kod contoh4copy.c.

Di sini kami hanya menggunakan pernyataan cetak untuk mendapatkan id proses semasa.

Hasil kod masing-masing dapat diperoleh dengan menggunakan perintah berikut.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./sampel4

Seperti yang telah kami jelaskan sebelumnya, kata GCC digunakan untuk menyusun kod, dan setelah disusun, kod tersebut berhasil dilaksanakan.

Menurut gambar, PID fail sample4.c ditunjukkan terlebih dahulu seperti yang dinyatakan sebelum panggilan exec. Kemudian setelah fungsi exec () dipanggil, kedua-dua pernyataan cetak dari file sample4copy.c dijalankan di mana getpid () digunakan untuk mendapatkan id proses.

Pengekodan dengan garpu di c

Fungsi garpu () mencipta proses anak dari proses ibu bapa. Ia juga mengandungi dua tajuk, termasuk maklumat garpu di dalamnya.

Sintaks:

Garpu Pid_t(batal);

Kami boleh menggunakan halaman manual untuk mendapatkan bantuan dalam penggunaannya

$lelakigarpu

Contoh: Sekarang pertimbangkan contoh dengan membuat sampel3.c fail. Kami akan memasukkan kod di dalam fail. Menurut kod, kami telah menetapkan status garpu sebagai forkrank.

Contoh3.c

Kami telah menggunakan pernyataan if-else untuk menerapkan syarat tersebut. Perintah cetak ringkas dinyatakan di sini untuk membantu memahami konsep garpu (). Forkrank pertama kali dinyatakan sebagai 0 dan kemudian -1. Dengan garpu (), kini terdapat dua proses yang berjalan serentak. Output dapat diperoleh dengan menggunakan kod yang sama, seperti yang digunakan di atas dalam contoh exec.

$ GCC –o sample3.c
$./sampel3

Hasilnya menunjukkan bahawa proses anak dijalankan lebih awal daripada ibu bapa ketika proses ibu bapa sedang menunggu. Fungsi tunggu menyiratkan bahawa ia menyebabkan fungsi ibu bapa menunggu kecuali salah satu daripada semua proses anak ditamatkan.

Panggilan sistem Fork dan Exec Secara Kolektif

Di sini kita akan mengambil dua fail bernama sample1.c dan sample2.c. Pertama, buka fail sampl1.c dan tulis kod yang dilampirkan di bawah dalam gambar. Kami telah menggunakan sistem panggilan fork () di sini; semasa proses anak dibuat, p akan ditugaskan dengan 0. Semasa menggunakan exec system-call, sample1.c akan diganti dengan sample2.c.

Contoh1.c

Contoh2.c

Sama seperti contoh yang dibincangkan di atas, fail sample2 akan mengandungi pernyataan printf di dalamnya. Dalam sample1.c, perintah cetak pertama dijalankan terlebih dahulu, kemudian fungsi garpu dipanggil, ketika p == 0, maka bahagian anak dijalankan dan file sample2.c akan dijalankan. Hasilnya akan mengandungi GCC untuk menyusun kedua-dua fail. Di sini induk sample1.c id dan sample2.c berbeza kerana mereka adalah ibu bapa dan anak.

Kesimpulannya

Dalam artikel ini, kami telah menggunakan garpu dan exec secara berasingan dan bersama untuk memahami penggunaan dan konsep dengan mudah. Saya harap tutorial ini mengandungi kandungan yang mencukupi yang akan membolehkan akses meningkatkan pengetahuan anda.