Bilindiği gibi normal olarak exec fonksiyonları process'i başka bir program olarak devam
ettirmektedir. Halbuki pek çok uygulamada başka bir programı çalıştıran programın da devam
etmesi istenir. Bunun için önce bir kere fork işlemi yapılır, alt process'te exec fonksiyonu
uygulanır. Bu işlem tipik olarak aşağıdaki gibi yapılabilir:
pid_t pid;
if ((pid = fork()) == -1) {
perror("fork");
exit(1);
}
if (pid == 0) {
if (execl(.....) < 0) {
perror("exec");
exit(1);
}
}
wait(NULL);
// ...
Buradaki işlem Win32'de CreateProcess uygulayıp WaitForSingleObject fonksiyonuyla
beklemeye karşılık gelir.gcc dereyicisiyle komut satırı argümanı olarak verilen bir dosyayı
derleyiniz, sonra çalışabilen dosyayı ls -l ile görüntüleyiniz.
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>int main(int argc, char *argv[])
{
pid_t pid;
if (argc != 2) {
fprintf(stderr, "Wrong number of argument!..\n");
exit(1);
}
if ((pid = fork()) == -1) {
perror("Fork");
exit(EXIT_FAILURE);
}
if (pid == 0) {
printf(argv[1]);
printf("\n");
if (execlp("gcc", "gcc", "-g", argv[1], (char *) 0) < 0) {
perror("child1 exec");
exit(EXIT_FAILURE);
}
}
wait(NULL);
if ((pid = fork()) == -1) {
perror("Fork");
exit(EXIT_FAILURE);
}
if (pid == 0) {
if (execlp("ls", "ls", "-l", (char *) NULL) < 0) {
perror("child2 exec");
exit(EXIT_FAILURE);
}
}
wait(NULL);
return 0;
}
Yorum Gönder