C Programlama

c'de örnek olarak fork ve exec ile kodlama

c'de örnek olarak fork ve exec ile kodlama
Yazımızın başlığı, sistemimizde herhangi bir programı çalıştırırken oluşan C dilinin iki farklı fonksiyonunu içermektedir. Ne yazık ki, C'de aynı anda birden fazla programın meydana gelme olasılığı sıfırdır. Belirli bir zamanda yalnızca tek bir görev gerçekleşebilir, bu da eşzamanlı programların çalışmasına izin vermediği anlamına gelir. Diğerini yürütmek için bir işlemin tamamlanmasını beklemenize neden olur. Bu sorun giderme probleminden kaçınmak için programınızı iyi bir şekilde geliştirmeniz, iyi bir geliştirici olmanız gerekebilir. Linux fork () sisteminizde beklemenin üstesinden gelmek ve eşzamanlılığa izin vermek için kullanılır. Yeni bir işlemin çoğaltılmasına yardımcı olur ve çoğaltılan işlemi çağırarak yeni bir tane oluşturur. Yeni süreç alt süreç, önceki süreç ise ana süreç olarak adlandırılır.

Oysa mevcut programı yenisiyle değiştirmek için exec () işlevi kullanılır. Bu değiştirme, bir programın veya dosyanın içeriğinde değişiklik yapılarak yapılır. Bu nedenle, fork ve exec arasındaki fark, fork'un mevcut süreçten yeni bir süreç oluşturması ve exec'in mevcut programı yeni bir program oluşturarak değiştirmek için kullanılmasıdır.

Önkoşullar

Linux sisteminizde herhangi bir c programını çalıştırmak için, üzerine bazı önkoşullar yüklememiz gerekiyor. Ctrl+Alt+T kısayol yöntemini kullanarak terminale gidin. Şimdi man sayfalarını kurmak için aşağıdaki komutları yazın.

$ sudo apt install manpages-dev

İlgili tüm sayfaları yükleyecektir.

İleriye dönük olarak, Linux'ta bir program çalıştırmak için bir kod derleyici kurmanız gerekir. Kodu derlemek ve yürütmek için kullanılır. Bu amaçla sistemimize GCC depoları kuracağız.

$ sudo apt GCC'yi kurun

c'de exec ile kodlama

Man sayfalarını Linux'a yüklediğimiz için, exec ile ilgili açıklamayı görmek için aşağıdaki komutu kullanacağız. Birincil örnek sözdizimi aşağıdaki gibidir:

Sözdizimi

Exec (yol adı/dosya, argv);

Burada “unistd.h” başlığı, exec işlevi ailelerinin tüm bilgilerini içerdiğinden.

$ adam yürütme

Şimdi yukarıda belirtilen görüntüde, yürütme türlerini gözlemleyebilirsiniz. Bunlar, exec işlevleri ailesidir. Her biri aynı temeli izleyen farklı bir işlev içindir, “exec.”

Misal: Şimdi, daha da ileri giderek, bir örnek yardımıyla exec'in işlevselliğini açıklayacağız. Çalışmasını göstermek için "execv" olan bir exec işlevini alacağız.” İlk olarak “ uzantılı iki dosya oluşturacağız.c.” Oluşturulduktan sonra ilgili kodları içlerine yazacağız ve sonucu görmek için çalıştıracağız.

Bir dosya adı düşünün “örnek4.c”. Lütfen açın ve aşağıdaki kodu kullanın. Bu kodda, aşağıda belirtilen belirli bir şekilde execv kullandık.

Yürütme (“./sample4copy”, bağımsız değişkenler);

İlk kısım yeni dizin yolunu içerir ve ikinci kısım, geçtiğimiz bir parametre olarak argümanlar dizisini gösterir.

Örnek4.c

Her şeyden önce, mevcut işlemin kimliğini yazdırdık. İkinci olarak, sonlandırma için sonunda NULL olan bir karakter dizisi oluşturduk. Üçüncüsü, sample4copy işlevini çağırdık.

Örnek4kopya.c

exec işlevini() çağırdığımızda, süreç görüntüsü değiştirilir. Aşağıda belirtilen resim, sample4copy kodunu gösterir.c.

Burada, mevcut işlemin kimliğini almak için yalnızca print ifadelerini kullandık.

İlgili kodların çıktısı aşağıdaki komutlar kullanılarak alınabilir.

$ GCC-o örnek4 örnek4.c
$ GCC -o sample4copy sample4copy.c
$ ./örnek4

Daha önce açıkladığımız gibi, kodu derlemek için “GCC” kelimesi kullanılır ve derlendikten sonra kod başarıyla yürütülür.

Resme göre, sample4'ün PID'si.c dosyası, exec çağrısından önce bildirildiği için ilk önce gösterilir. Daha sonra exec() işlevi çağrıldıktan sonra, sample4copy dosyasının hem print deyimleri.c, işlemin kimliğini elde etmek için getpid() öğesinin kullanıldığı yerde yürütülür.

c de çatalla kodlama

fork() işlevi, ana süreçten alt süreci oluşturur. Ayrıca içindeki çatal bilgileri de dahil olmak üzere iki başlık içerir.

Sözdizimi:

Pid_t çatalı(void);

Kullanımda yardım için man sayfasını kullanabiliriz

$ adam çatal

Misal: Şimdi bir “sample3” dosyası oluşturarak bir örnek düşünün.c”. Kodu dosyanın içine gireceğiz. Koduna göre fork durumunu forkrank olarak belirledik.

Örnek3.c

Koşulu uygulamak için “if-else” ifadesini kullandık. Burada fork() kavramının anlaşılmasına yardımcı olmak için basit yazdırma komutları bildirilmiştir. Forkrank önce 0, sonra -1 olarak bildirilir. Bir çatal() ile artık aynı anda çalışan iki süreç vardır. Çıktı, yukarıda exec örneğinde kullanıldığı gibi aynı kod kullanılarak elde edilebilir.

$ GCC -o örnek3.c
$./örnek3

Çıktı, ana süreç beklerken alt sürecin ebeveynden daha önce yürütüldüğünü gösterir. Wait işlevi, tüm alt süreçlerden biri sonlandırılmadığı sürece üst işlevin beklemesine neden olduğunu ima eder.

Fork ve Exec sistemi toplu olarak çağırır

Burada “sample1” adında iki dosya alacağız.c” ve “örnek2.c”. İlk önce sampl1 dosyasını açın.c ve aşağıdaki resimde eklenen kodu yazın. Burada fork() sistem çağrısını kullandık; alt süreç oluşturulduğunda, p 0 ile atanacaktır. exec sistem çağrısını kullanırken, örnek1.c sample2 ile değiştirilecektir.c.

Örnek1.c

Örnek2.c

Yukarıda tartışılan örneklere benzer şekilde, sample2 dosyası içinde printf deyimlerini içerecektir. örnek1'de.c, önce ilk yazdırma komutu yürütülür, ardından çatal işlevi çağrılır, p== 0 olduğunda alt kısım yürütülür ve örnek2.c dosyası çalıştırılacak. Çıktı, her iki dosyayı da derlemek için GCC içerecektir. Burada ebeveyn örneği1.c kimliği ve örnek2.c kimliği farklıdır çünkü onlar ebeveyn ve çocuktur.

Sonuç

Bu yazıda kullanımı ve konsepti kolayca anlamak için hem fork hem de exec'i ayrı ayrı ve toplu olarak kullandık. Umarım bu eğitim, bilginizi artırmada erişime yol açacak yeterli içerik içerir.

Linux Oyunlarını Otomatikleştirmek için AutoKey Nasıl Kullanılır?
AutoKey, Linux ve X11 için Python 3, GTK ve Qt'de programlanmış bir masaüstü otomasyon aracıdır. Komut dosyası oluşturma ve MAKRO işlevselliğini kulla...
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...
How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...