Yukarıdaki komutu çalıştırma komutu ile aşağıdaki kod arasındaki fark nedir?
#include
int main ( )
{
int return_value;
return_value = system ( "ls /" );
return return_value;
}
Yukarıdaki komutu çalıştırma komutu ile aşağıdaki kod arasındaki fark nedir?
#include
int main ( )
{
int return_value;
return_value = system ( "ls /" );
return return_value;
}
Yanıtlar:
system("ls /")
Bir sh
süreci doğuracak , argüman vererek -c
ve ls /
. Bu nedenle, programınızın çalıştırılması ve sh -c "ls /"
bir kabuğa yazma işlemi arasındaki temel fark , ilk durumda, programınızı içeren bir işlem olduğudur. Böylece ls
, çalışırken çalışırken işlem ağacını yakalarsanız , şöyle bir şey görürsünüz:
init───konsole───bash───myprog───sh───ls
onun yerine
init───konsole───bash───sh───ls
exec
İşlev ailesinden birini kullandıysanız, sh
tamamen kullanmaktan kaçınabilir ve programınızı ls
yardımcı programla değiştirebilirsiniz . Bu durumda, göreceksiniz:
init───konsole───bash───ls
Program şöyle görünebilir:
int main(int argc, char** argv) {
return execlp("ls", "ls", "/");
}
Seçenek bash
dahilinde yürütülen -c
komut basit bir komut ise birçok kabuk - dahil - bunu otomatik olarak yapar . Öyle olsa bile, kabuğunu yerine koyabileceğiniz bir işlemle değiştirmek için bir kabuğun yumurtlama noktası yoktur exec
.
Dosyayı okumak için açmak için gerekenler dışında sh -c "ls -l"
ve arasında çok az bir fark var sh ls-l.sh
.
exec
değiştirirexec
. exec
(Belirtilen programı bulmak mümkün olmadığı gibi) görev yapmasını engelleyen bir hata varsa arama yalnızca döndürür. Geri system
dönüş olandan oldukça farklı .
init───konsole───bash───myprog───ls