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 shsüreci doğuracak , argüman vererek -cve 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, shtamamen kullanmaktan kaçınabilir ve programınızı lsyardı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 bashdahilinde yürütülen -ckomut 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 systemdönüş olandan oldukça farklı .
init───konsole───bash───myprog───ls