Sedangkan fungsi exec() digunakan untuk mengganti program yang sudah ada dengan yang baru. Penggantian ini dilakukan dengan melakukan amandemen terhadap isi program atau file. Jadi perbedaan antara fork dan exec adalah fork membuat proses baru dari proses yang ada, dan exec digunakan untuk menggantikan program yang ada dengan membuat yang baru.
Prasyarat
Untuk menjalankan program c apa pun di sistem Linux Anda, kami perlu menginstal beberapa prasyarat di dalamnya. Pergi ke terminal dengan menggunakan cara pintas Ctrl+Alt+T. Sekarang tulis perintah berikut untuk menginstal halaman manual.
$ sudo apt install manpages-dev
Ini akan menginstal semua halaman yang sesuai.
Ke depan, untuk menjalankan program di Linux, Anda perlu menginstal kompiler kode. Itu digunakan untuk mengkompilasi kode dan menjalankannya. Untuk tujuan ini, kami akan menginstal repositori GCC di sistem kami.
$ sudo untuk menginstal GCC
Pengkodean dengan exec di c
Karena kami telah menginstal halaman manual di Linux, kami akan menggunakan perintah berikut untuk melihat deskripsi tentang exec. Sintaks sampel utama adalah sebagai berikut:
Sintaksis
Exec (nama path/file, argv );Di sini kita telah menggunakan "unistd".h” header karena berisi semua informasi keluarga fungsi exec.
$man eksekutif
Sekarang pada gambar yang dikutip di atas, Anda dapat mengamati jenis-jenis eksekutif. Ini adalah keluarga fungsi execec. Masing-masing untuk fungsi yang berbeda mengikuti basis yang sama, “exec.”
Contoh: Sekarang, bergerak lebih jauh, kami akan menjelaskan fungsionalitas exec dengan bantuan sebuah contoh. Kami akan mengambil satu fungsi dari exec untuk mendemonstrasikan kerjanya, yaitu “execv.” Pertama, kita akan membuat dua file dengan ekstensi “.c.” Setelah mereka dibuat, kami akan menulis kode masing-masing di dalamnya dan menjalankannya untuk melihat hasilnya.
Pertimbangkan nama file "sample4".c”. Silahkan buka dan gunakan kode berikut. Dalam kode ini, kami telah menggunakan execv dengan cara tertentu yang dikutip di bawah ini.
Eksekusi (“./sample4copy”, argumen);Bagian pertama berisi jalur direktori baru, dan bagian kedua menunjukkan array argumen sebagai parameter yang telah kita lewati.
Contoh4.c
Pertama-tama, kami telah mencetak id proses saat ini. Kedua, kami telah membuat array karakter yang memiliki NULL pada akhirnya untuk penghentian. Ketiga kita telah memanggil fungsi sample4copy.
Contoh4salinan.cSaat kita memanggil fungsi exec(), gambar proses berubah. Di bawah gambar yang dikutip di bawah ini menunjukkan kode sample4copy.c.
Di sini kami hanya menggunakan pernyataan cetak untuk mendapatkan id dari proses saat ini.
Output dari masing-masing kode 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 mengkompilasi kode, dan setelah dikompilasi, kode berhasil dieksekusi.
Menurut gambar, PID sampel4.c file ditampilkan terlebih dahulu seperti yang dideklarasikan sebelum panggilan exec. Kemudian setelah fungsi exec() dipanggil, kedua pernyataan cetak dari file sample4copy.c dieksekusi di mana getpid() digunakan untuk mendapatkan id proses.
Pengkodean dengan garpu di c
Fungsi fork() membuat proses anak dari proses induk. Itu juga berisi dua header, termasuk informasi garpu di dalamnya.
Sintaksis:
Garpu Pid_t(kosong);Kami dapat menggunakan halaman manual untuk bantuan dalam penggunaan
$ garpu pria
Contoh: Sekarang perhatikan sebuah contoh dengan membuat file “sample3.c”. Kami akan memasukkan kode di dalam file. Menurut kode, kami telah menetapkan status fork sebagai forkrank.
Contoh3.c
Kami telah menggunakan pernyataan "jika-lain" untuk menerapkan kondisi. Perintah cetak sederhana dideklarasikan di sini untuk membantu memahami konsep fork()(). Forkrank pertama kali dideklarasikan sebagai 0 dan kemudian -1. Dengan fork(), sekarang ada dua proses yang bekerja secara bersamaan. Output dapat diperoleh dengan menggunakan kode yang sama, seperti yang digunakan di atas dalam contoh exec.
$ GCC -o sampel3.c$./sampel3
Outputnya menunjukkan bahwa proses anak dieksekusi lebih awal dari orang tua ketika proses induk sedang menunggu. Fungsi tunggu menyiratkan bahwa itu menyebabkan fungsi induk menunggu kecuali salah satu dari semua proses anak dihentikan.
Panggilan sistem Fork dan Exec Secara Kolektif
Di sini kita akan mengambil dua file bernama "sample1".c" dan "contoh2".c”. Pertama, buka file sample1.c dan tulis kode yang dilampirkan di bawah pada gambar. Kami telah menggunakan fork() system-call di sini; ketika proses anak dibuat, p akan diberikan dengan 0. Saat menggunakan panggilan sistem exec, sample1.c akan diganti dengan sample2.c.
Contoh1.c
Contoh2.c
Mirip dengan contoh yang dibahas di atas, file sample2 akan berisi pernyataan printf di dalamnya. Dalam sampel1.c, perintah print pertama dijalankan terlebih dahulu, kemudian fungsi fork dipanggil, ketika p== 0, maka porsi anak dijalankan dan sample2.file c akan dijalankan. Outputnya akan berisi GCC untuk mengkompilasi kedua file. Di sini sampel orang tua1.c id dan sampel2.c id berbeda karena mereka adalah orang tua dan anak.
Kesimpulan
Dalam artikel ini, kami telah menggunakan fork dan exec secara terpisah dan bersama-sama untuk memahami penggunaan dan konsep dengan mudah. Saya harap tutorial ini berisi konten yang cukup yang akan mengarah pada akses dalam meningkatkan pengetahuan Anda.