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.
$ sudo apt install manpages-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.
$ sudo apt pasangkan GCC
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
Exec (nama jalan / fail, argv);Di sini kita telah menggunakan "unistd.h ”tajuk kerana mengandungi semua maklumat 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 pangkalan 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, kami akan membuat dua fail dengan sambungan".c."Setelah dibuat, kami akan menulis kod masing-masing di dalamnya dan melaksanakannya untuk melihat hasilnya.
Pertimbangkan nama fail "sample4.c ”. Sila buka dan gunakan kod berikut. Dalam kod ini, kami telah menggunakan execv dengan cara tertentu yang disebutkan di bawah.
Execv (“./ sample4copy ”, args);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 kita memanggil fungsi sample4copy.
Contoh4 salinan.cApabila 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 sampel4 sampel4.c$ GCC -o sample4copy sample4copy.c
$ ./ sampel4
Seperti yang telah kami jelaskan sebelumnya, kata "GCC" digunakan untuk menyusun kod, dan setelah menyusunnya, kod tersebut berhasil dilaksanakan.
Menurut gambar, PID sampel4.fail c ditunjukkan pertama seperti yang dinyatakan sebelum panggilan exec. Kemudian setelah fungsi exec () dipanggil, kedua-dua pernyataan cetak file4copy.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:
Pid_t garpu (tidak sah);Kita boleh menggunakan halaman manual untuk mendapatkan bantuan dalam penggunaannya
$ garpu lelaki
Contoh: Sekarang pertimbangkan satu contoh dengan membuat fail “sample3.c ”. 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 mudah 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 sampel3.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" sampel2.c ”. Pertama, buka fail sampl1.c dan tuliskan 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 sistem panggilan exec, sampel1.c akan diganti dengan sampel2.c.
Contoh1.c
Contoh2.c
Sama seperti contoh yang dibincangkan di atas, fail sample2 akan mengandungi pernyataan printf di dalamnya. Dalam sampel1.c, perintah cetak pertama dijalankan terlebih dahulu, kemudian fungsi garpu dipanggil, apabila p == 0, maka bahagian anak dijalankan dan contoh2.fail c akan dijalankan. Hasilnya akan mengandungi GCC untuk menyusun kedua-dua fail. Di sini contoh ibu bapa1.c id dan sampel2.c id 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.