Pemrograman C

Coding dengan fork dan exec dengan contoh di c

Coding dengan fork dan exec dengan contoh di c
Judul artikel kami berisi dua fungsi berbeda dari bahasa C yang terjadi saat menjalankan program apa pun di sistem kami. Sayangnya, tidak ada kemungkinan terjadi lebih dari satu program pada satu waktu di C. Hanya satu tugas yang dapat terjadi pada waktu tertentu, yang berarti tidak memungkinkan program berjalan secara bersamaan. Itu menyebabkan Anda menunggu penyelesaian satu proses untuk mengeksekusi yang lain. Untuk menghindari masalah pemecahan masalah ini, Anda mungkin perlu mengembangkan program Anda dengan cara yang baik, menjadi pengembang yang baik. Garpu Linux () digunakan untuk mengatasi menunggu dan memungkinkan konkurensi di sistem Anda. Ini membantu dalam menduplikasi proses baru dan membuat yang baru dengan memanggil proses yang digandakan. Proses baru adalah proses anak, dan yang sebelumnya disebut proses induk.

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.c

Saat 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.

Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...
Mesin Game Gratis dan Sumber Terbuka untuk Mengembangkan Game Linux
Artikel ini akan membahas daftar mesin game sumber terbuka dan gratis yang dapat digunakan untuk mengembangkan game 2D dan 3D di Linux. Ada banyak mes...
Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah tambahan kedua belas untuk seri Tomb Raider - waralaba game aksi-petualangan yang dibuat oleh Eidos Montreal. Permain...