CodeBlanks Logo Icon CodeBlanks

exec

  • C kursu
  • İleri seviye
  • Ders 8/83
  • 5 dk

exec ailesi ile süreç değiştirmeyi öğrenirsin.

exec ailesi

exec ailesi, sürecin belleğini yeni bir programla değiştirir. Süreç numarası aynı kalır ama kod, veri ve yığın yenisiyle değiştirilir. exec başarılı olursa geri dönmez.

Yaygın üyeler: execl, execv, execlp, execvp. execvp PATH değişkeninde arama yapar; komut adını vermen yeter. Örneğin execvp("echo", args) süreci echo programıyla değiştirir. Başarısızlıkta -1 döner.

exec neden fork ile?

exec süreci değiştirdiği için tek başına çağırırsan özgün programın devamı kaybolur. Bu yüzden genelde fork ile çocuk oluşturup, çocukta exec çağırırsın; ebeveyn ise kendi işine devam eder.

Bu fork-exec deseni UNIX'te program çalıştırmanın standart yoludur. Kabuklar her komut için bunu yapar: fork → çocuk exec → ebeveyn wait. Böylece kabuk çalışmaya devam ederken çocuk komutu yürütür.

Uygulama execvp ile echo çalıştır

char *args[] = {"echo", "merhaba", NULL}; dizisini tanımla. execvp("echo", args); ile süreci echo programıyla değiştir. Başarısızlık için printf("exec başarısız\n"); yaz.

Başlangıç kodu

main.c
#include <stdio.h>
#include <unistd.h>

// args dizisini tanımla
// execvp çağır
// hata durumunu yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <unistd.h>

int main(void) {
    char *args[] = {"echo", "merhaba", NULL};
    execvp("echo", args);
    printf("exec başarısız\n");
    return 1;
}

Beklenen çıktı

merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 exec üyelerini eşle

Kavram Anlamı
execl Liste biçimi
execv Dizi biçimi
execlp PATH aramalı liste
execvp PATH aramalı dizi

2 execvp başarılı olursa ne olur?

  • Süreç sonlanır
  • Yeni süreç oluşur
  • PID değişir
  • Sürecin programı değişir Doğru cevap

Açıklama: exec sürecin programını değiştirir; PID aynı kalır.

3 args dizisi

Soru
char *args[] = {"echo", "merhaba", ____};
Cevap
char *args[] = {"echo", "merhaba", NULL};

Açıklama: args dizisi NULL ile bitmeli.

İleri seviye bölümündeki tüm dersler