C Programlama

C'de Exec Sistem Çağrısı

C'de Exec Sistem Çağrısı
exec ailesinin C'de birçok işlevi vardır. Bu C işlevleri temel olarak, ana programın ve çıktının yazdırıldığı ayrı bir işlemde bir sistem komutunu çalıştırmak için kullanılır.

Bu yazıda, exec işlev ailesi hakkında konuşacağım ve bu exec ailesi işlevlerinin her birinin C'de nasıl kullanılacağını göstereceğim. Öyleyse başlayalım.

Exec Ailesindeki C Sistem İşlevleri:

exec işlev aileleri başlıkta tanımlanır unistd.h. Bu nedenle, bu işlevleri kullanmak istediğiniz C programında bu başlığı kullanmalısınız.

Kullanılabilir yürütme işlevleri, işlev parametreleriyle birlikte aşağıda verilmiştir:

Bu işlevlerin her birinin ne yaptığını ve nasıl kullanılacağını görelim.

execl() Sistem İşlevi:

execl() sisteminde sistem işlevi yürütülebilir ikili dosyanın yolunu alır (i.e. /bin/ls) birinci ve ikinci argüman olarak. Ardından, argümanlar (i.e. -lh, /ev) yürütülebilir dosyaya geçmek istediğiniz ve ardından BOŞ. Ardından execl() sistem işlevi komutu çalıştırır ve çıktıyı yazdırır. Herhangi bir hata oluşursa, execl() -1 değerini döndürür. Aksi takdirde, hiçbir şey döndürmez.

Sözdizimi:

int execl(const char *yol, const char *arg,…, NULL);

execl() sistem fonksiyonunun bir örneği aşağıda verilmiştir:

#Dahil etmek
 
int ana(boşluk)
char *binaryPath = "/bin/ls";
karakter *arg1 = "-lh";
char *arg2 = "/home";
 
execl(binaryPath, ikiliPath, arg1, arg2, NULL);
 
0 döndür;

koştum ls -lh /ev execl() sistem işlevini kullanarak komut. Gördüğünüz gibi, doğru sonuç görüntüleniyor.

execlp() Sistem İşlevi:

execl() kullanmaz YOL Çevre değişkeni. Bu nedenle, yürütülebilir dosyanın tam yolu, onu execl() ile çalıştırmak için gereklidir. execlp() PATH ortam değişkenini kullanır. Bu nedenle, PATH'de yürütülebilir bir dosya veya komut varsa, komut veya dosya adı onu çalıştırmak için yeterlidir, tam yola gerek yoktur.

Sözdizimi:

int execlp(const char *dosyası, const char *arg,… , NULL );

execlp() sistem fonksiyonunu kullanarak execl() örneğini aşağıdaki gibi yeniden yazabiliriz:

#Dahil etmek
 
int ana(boşluk)
char *programAdı = "ls";
karakter *arg1 = "-lh";
char *arg2 = "/home";
 
execlp(programAdı, programAdı, arg1, arg2, NULL);
 
0 döndür;

sadece komut adını geçtim ls, tam yol değil /bin/ls. Gördüğünüz gibi, öncekiyle aynı çıktıyı aldım.

execv() Sistem İşlevi:

execl() işlevinde, yürütülebilir dosyanın parametreleri işleve farklı argümanlar olarak iletilir. execv() ile, NULL sonlandırılmış bir dizideki tüm parametreleri iletebilirsiniz bağımsız değişken. Dizinin ilk elemanı, yürütülebilir dosyanın yolu olmalıdır. Aksi takdirde, execv() işlevi tıpkı execl() işlevi gibi çalışır.

Sözdizimi:

int execv(const char *yol, char *const argv[]);

execl() örneğini aşağıdaki gibi yeniden yazabiliriz:

#Dahil etmek
 
int ana(boşluk)
char *binaryPath = "/bin/ls";
char *args[] = binaryPath, "-lh", "/home", NULL;
 
execv(ikiliYol, argümanlar);
 
0 döndür;

Gördüğünüz gibi, doğru çıktıyı alıyorum.

execvp() Sistem İşlevi:

execv() sistem işleviyle aynı şekilde çalışır. Ancak, PATH ortam değişkeni kullanılır. Bu nedenle, yürütülebilir dosyanın tam yolu, execlp()'deki gibi gerekli değildir.

Sözdizimi:

int execvp(const char *dosyası, char *const argv[]);

execv() örneğini aşağıdaki gibi yeniden yazabiliriz:

#Dahil etmek
 
int ana(boşluk)
char *programAdı = "ls";
char *args[] = programName, "-lh", "/home", NULL;
 
execvp(programAdı, argümanlar);
 
0 döndür;

Gördüğünüz gibi, doğru çıktı görüntüleniyor.

execle() Sistem İşlevi:

Tıpkı execl() gibi çalışır ancak bununla birlikte kendi ortam değişkenlerinizi de sağlayabilirsiniz. Ortam değişkenleri bir dizi olarak iletilir envp. son elemanı envp dizi NULL olmalıdır. Diğer tüm öğeler, anahtar/değer çiftlerini dize olarak içerir.

Sözdizimi:

int execle(const char *yol, const char *arg,… , NULL, char * const envp[] );

execle() sistem fonksiyonunun bir örneği aşağıda verilmiştir:

#Dahil etmek
 
int ana(boşluk)
char *binaryPath = "/bin/bash";
karakter *arg1 = "-c";
char *arg2 = "echo "Tarayıcınızdan $HOSTNAME:$PORT adresini ziyaret edin."";
char *const env[] = "HOSTNAME=www.linux ipucu.com", "PORT=8080", BOŞ;
 
execle(binaryPath, ikiliPath,arg1, arg2, NULL, env);
 
0 döndür;

İki ortam değişkenini geçtim HOSTNAME ve LİMAN execle() işlevine. Gördüğünüz gibi, onlara yürütülebilir dosyadan erişebiliyorum /bin/bash.

execve() Sistem İşlevi:

Tıpkı execle() gibi, execve() ile birlikte kendi ortam değişkenlerinizi sağlayabilirsiniz. Ayrıca execv()'de yaptığınız gibi argümanları diziler olarak da iletebilirsiniz.

Sözdizimi:

int execve(const char *dosyası, char *const argv[], char *const envp[]);

execle() örneği aşağıdaki gibi yeniden yazılabilir:

#Dahil etmek
 
int ana(boşluk)
char *binaryPath = "/bin/bash";
char *const args[] = binaryPath, "-c", "echo "$HOSTNAME adresini ziyaret edin:$PORT
tarayıcınızdan."", BOŞ;
char *const env[] = "HOSTNAME=www.linux ipucu.com", "PORT=8080", BOŞ;
 
execve(binaryPath, args, env);
 
0 döndür;

Gördüğünüz gibi execle() örneğindeki çıktının aynısını alıyoruz.

Linux'ta sistem programlaması için C'deki exec işlev ailesini bu şekilde kullanırsınız. Bu makaleyi okuduğunuz için teşekkürler.

Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...
Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...