Exec (Unix)

exec è una funzione di sistema presente nella libreria standard del C del progetto GNU, la GNU C Library.

Informazioni di carattere generale

Exec sostituisce i segmenti codice e dati del processo correntemente in esecuzione nello stato di utente con quelli di un altro programma contenuto in un file eseguibile specificato.

Agendo solo su processi in stato di utente la exec non interviene sul segmento di sistema e sui file utilizzati dal processo che la invoca.

Durante la chiamata ad exec e al successivo caricamento nella Ram del nuovo codice compilato il processo mantiene lo stesso pid.

La funzione exec deve passare dei parametri al nuovo programma che viene eseguito. Essi vengono letti dal programma tramite il meccanismo di passaggio usuale argc, argv.

Implementazione

Questo servizio è implementato in C sotto Unix (ma anche in generale in POSIX ), tramite una famiglia di chiamate di sistema (comprese in unistd.h su unix e process.h nei sistemi dos/win32.).

Principalmente troviamo:

int execl(const char *pathname, const char *arg, ..., (char *) NULL);
int execle(const char *pathname, const char *arg, ..., (char *) NULL, char *const envp[]);
int execlp(const char *file, const char *arg, ..., (char *) NULL);
int execlpe(const char *path, const char *arg0, ..., const char *const *envp); //Solo process.h ??
int execv(const char *pathname, char *const argv[]);
int execve(const char *pathname, char *const argv[], char *const envp[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

Il primo argomento, pathname che vediamo in ciascuno degli exec*, specifica il percorso e il nome del file da eseguire come processo figlio. Gli argomenti arg0,...,argN sono una lista di puntatori agli argomenti da passare al processo figlio; argv è un array di puntatori agli argomenti. L'argomento envp è invece un array di puntatori alla configurazione dell'ambiente attuale. Le chiamate execle, execlpe, execve ed execvpe (ovvero quelle con il suffisso 'e'), alterano l'ambiente del loro processo figlio, passando una lista con le configurazioni d'ambiente per l'appunto tramite l'argomento envp (array di puntatori a caratteri).

Funzioni e nomi

L'unica vera chiamata di sistema è la execve, le altre si differenziano da questa per come vengono passati i parametri.

In linea di massima si può dire che la p finale che troviamo nelle due varianti execlp ed execvp, hanno come significato che il primo parametro passato come argomento non dev'essere necessariamente il path ma può essere il nome di ciò che intendiamo eseguire.

Un esempio potrebbe essere il seguente:

execl("/bin/ls","ls", "-l", (char *)0);

e il suo complementare che contiene la p ma non il path:

execlp("ls","ls", "-l", (char *)0);

Le altre lettere che possiamo trovare oltre al suffisso "p" (e, l o v) presentano dei significati ben precisi.

Riassumendo si hanno le seguenti funzioni di base:

Funzione Caratteristica
p Non serve specificare il path.
v Gli argomenti a riga di comando saranno passati alla funzione tramite un array di puntatori.
e L'insieme dei puntatori dell'environment è passato esplicitamente al processo figlio.
l Gli argomenti a riga di comando sono passati individualmente alla funzione.

Gestione degli errori

Normalmente le funzioni exec* non tornano al processo chiamante, se una funzione exec torna al processo chiamate vuol dire che la chiamata non è andata a buon fine. Viene allora tornato il valore di errore -1, ed errno ci presenta uno dei seguenti valori:

Errore Significato
E2BIG Sono stati immessi troppi argomenti.
EACCES Non si può avere l'accesso al file specificato (problemi di blocco/privilegi).
ENOENT Il file o il path specificato non esiste.
ENOMEM Non c'è abbastanza memoria per eseguire il processo figlio

Specifiche di Execve e delle sue varianti:

execve

Sintassi

int execve (const char *pathname, char *const argv[], char *const envp[])

  • "pathname" è il nome dell'eseguibile (completo di percorso) per il nuovo processo
  • "argv[]" è il vettore degli argomenti in input a pathname (accessibile dal main come main(int argc, char *argv[], char *env[])).
  • "env[]" è il vettore di ambiente in cui pathname è eseguito (accessibile dal main come main(int argc, char *argv[], char *env[])).
  • Gli elementi di env hanno la forma "var=valore".

Comportamento

execve esegue le seguenti azioni

  • cerca il formato di pathname
  • lancia il loader per il formato di pathname
  • crea una nuova mappa di memoria per il processo
  • sistema in maniera opportuna argomenti e ambiente
  • risistema le strutture dati di gestione della memoria del processo
  • carica una piccola parte dell'eseguibile (demand paging)
  • trasferisce il controllo al nuovo programma

Il processo viene poi messo in user mode: la chiamata - come tutte quelle della famiglia exec - non ritorna che in caso di errore.

Esempio d'uso

/*file sorgente execve.c*/

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

extern char **environ;

int main() {
  char *argv[] = {"nomeFile", NULL};

  if(execve("nomeFile", argv, enviroment))==-1)
    perror("execve fallita");

}

execl

esempio

Passiamo a visualizzare un esempio di utilizzo di execl:

int main(){
  printf("Esecuzione di ls\n");
  execl("/bin/ls", "ls", "-l", (char*)0);

  printf("Si è verificato un errore nell'esecuzione del codice\n");
  exit(1);
}

Osservazioni: Ci si potrebbe chiedere come mai dopo execl, ci sia una printf che segnala un errore, ed un'uscita che richiama un po' l'attenzione, ma bisogna pensare che execl elimina il programma originale sovrascrivendolo con quello passato come parametro. Quindi le istruzioni che seguono la chiamata ad execl, verranno eseguite solo se non sono state sovrascritte dal nuovo programma, cioè solo se si è verificato un errore durante l'esecuzione, e il controllo è stato ripassato al chiamante (execl).

execv

esempio

Ora vediamo un esempio di utilizzo di execv:

int main() {
  char *a[] = {"ls", "-l", (char *)0};
  printf("Esecuzione di ls\n");
  execv("/home/ls", a);

  printf("Si è verificato un errore nell'esecuzione del codice\n");
  exit(1);
}

Osservazioni: Come prima le istruzioni che seguono la chiamata ad execv, verranno eseguite solo se non sono state sovrascritte dal nuovo programma, cioè solo se si è verificato un errore durante l'esecuzione, e il controllo è stato ripassato al chiamante (execv).

execlp

Prototipo: int execlp(const char *file, const char *arg, ..., (char *) NULL);

  • Il primo argomento specifica il path del programma (cercato nelle cartelle della variabile di ambiente path)
  • Gli argomenti successivi, specificano una lista di stringhe terminata dalla stringa NULL che costituiscono gli argomenti passati al programma

Esempio di utilizzo:

for (i=1; i<=2; i++){
  fork();
  execlp("echo", "myEcho", "i", (char*)0);
  printf("%d\n", i); //codice che non verrà mai eseguito, a meno di errori nella execlp
}

La compilazione fornirà in output:

i
i

execvp

Prototipo: int execvp(const char *file, char *const argv[]);

Esempio di utilizzo:

int main(){
  char *a[]={"ls", "-l", (char *)0};
  printf("Esecuzione di ls\n");
  execvp("ls", a);

  printf("Si è verificato un errore nell'esecuzione del codice\n");
  exit(1);
}

execle

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

Read other articles:

Hissène Habréحسين حبريHabré pada tahun 1987 Presiden Chad ke-5Masa jabatan7 Juni 1982 – 1 Desember 1990Perdana MenteriDjidingar Dono Ngardoum PendahuluGoukouni OueddeiPenggantiIdriss DébyPerdana Menteri Chad ke-1Masa jabatan29 Agustus 1978 – 23 Maret 1979 PendahuluFrançois TombalbayePenggantiDjidingar Dono Ngardoum Informasi pribadiLahir(1942-08-13)13 Agustus 1942Faya-Largeau, Persekutuan Afrika Prancis Khatulistiwa (sekarang Chad)Meninggal24 Agustus...

 

Об экономическом термине см. Первородный грех (экономика). ХристианствоБиблия Ветхий Завет Новый Завет Евангелие Десять заповедей Нагорная проповедь Апокрифы Бог, Троица Бог Отец Иисус Христос Святой Дух История христианства Апостолы Хронология христианства Ран�...

 

Radio station in St. John's, Newfoundland and Labrador CKSJ-FMSt. John's, Newfoundland and LabradorBroadcast areaAvalon PeninsulaClarenvilleFrequency101.1 MHz (FM)BrandingCoast 101.1ProgrammingFormatClassic hitsOwnershipOwnerAndrew Bell(Coast Broadcasting Ltd.)HistoryFirst air dateFebruary 12, 2004Call sign meaningC(K)oast St. John's (branding and broadcast area)Technical informationClassCERP20,000 wattsHAAT221 meters (725 ft)LinksWebcastListen LiveWebsitecoast1011.com CKSJ-FM (101.1 MHz...

Eparki Katolik Siro-Malabar IrinjalkudaGereja Katolik Siro-Malabar LokasiNegara IndiaWilayahDistrik ThrissurProvinsi gerejawiKeralaMetropolitEparki Agung ThrissurStatistikPopulasi- Katolik260.000Paroki136Jemaat152InformasiDenominasiGereja Katolik Siro-MalabarRitusRitus Siria TimurPendirian1978KatedralRumah Uskup & Katedral Santo TomasKepemimpinan kiniPausFransiskusUskupMar Pauly Kannookadan, Uskup IrinjalakudaSitus webirinjalakudadiocese.com Eparki Irinjalakuda adalah sebua...

 

Al-Mustadrak 'ala aṣ-Ṣaḥiḥain PengarangHakim an-NaisaburiBahasaArabSubjekالمستدرك على الصحيحينGenreKumpulan Hadis Al-Mustadrak 'ala ash-Shahihain (Arab: المستدرك على الصحيحينcode: ar is deprecated ) adalah kitab koleksi hadits yang disusun oleh Hakim al-Naisaburi (w. 405 H) setebal lima jilid. Al-Hakim menyusun kitab ini pada tahun 393 H (1002 M) ketika dia berumur 72 tahun. Kitab ini memuat 9045 hadits.[1] Dia menyatakan bahwa seluruh had...

 

Uadjuer, gravido[1] e con corpo dalla forma umana ma costituito d'acqua, in un rilievo del Tempio funerario del faraone Sahura (XXV secolo a.C.) della V dinastia egizia ad Abusir. Uadjuer è una divinità egizia appartenente alla religione dell'antico Egitto, dio della fertilità il cui nome significa Grande Verde[2][3]. Si credeva inizialmente che Uadjuer fosse una personificazione del Mar Mediterraneo; d'altronde, sembra più verosimile che rappresentasse le lagune e...

Pottery with a reflective or iridescent surface Staffordshire pottery jug, c. 1815 Lustreware or lusterware (the respective spellings for British English and American English) is a type of pottery or porcelain with a metallic glaze that gives the effect of iridescence. It is produced by metallic oxides in an overglaze finish, which is given a second firing at a lower temperature in a muffle kiln, or a reduction kiln, excluding oxygen. The technique of lustreware on pottery was first developed...

 

Kota Niamey di waktu malam. Niamey adalah ibu kota sekaligus kota terbesar Niger di Afrika Barat. Sebagian besar kota Niamey terletak di tepi timur Sungai Niger. Pada sensus tahun 2012, terhitung populasi kota Niamey berjumlah 978.029 jiwa; Distrik Ibukota Niamey, yang seluas 670 km, memiliki jumlah penduduk sebanyak 1.026.848 jiwa.[1] Kota ini merupakan pusat administratif, budaya, dan ekonomi di Niger. Industri yang terdapat di kota ini antara lain adalah batu bata, keramik, se...

 

Rhode Island gubernatorial election 1860 Rhode Island gubernatorial election ← 1859 April 4, 1860 1861 →   Nominee William Sprague IV Seth Padelford Party Democratic Republican Alliance Conservative Popular vote 12,278 10,740 Percentage 53.02% 46.38% Governor before election Thomas G. Turner Republican Elected Governor William Sprague IV Democratic Elections in Rhode Island Federal government Presidential elections 1792 1796 1800 1804 1808 1812 1816 1820 1824 1...

Russian physicist Alexei ZamolodchikovBorn18 September 1952Novo-Ivankovo, Soviet UnionDied18 October 2007 (aged 55)Moscow, RussiaAlma materMoscow Institute of Physics and TechnologyScientific careerFieldsquantum field theory, quantum gravity, string theory Alexei Borisovich Zamolodchikov (Russian: Алексей Борисович Замолодчиков; 18 September 1952 – 18 October 2007) was a Russian physicist known for his contributions to quantum field theory, quantum gravity a...

 

British TV sitcom (1981–1983) The GafferCreated byGraham WhiteDirected byAlan TarrantStarringBill MaynardRussell HunterCountry of originUnited KingdomOriginal languageEnglishNo. of series3No. of episodes20ProductionRunning time30 minsProduction companyYorkshire TelevisionOriginal releaseNetworkITVRelease9 January 1981 (1981-01-09) –5 July 1983 (1983-07-05) The Gaffer is an ITV situation comedy series of the early 1980s, that starred Bill Maynard and was written by businessm...

 

1980 United States Senate election in Washington ← 1974 November 4, 1980 1986 →   Nominee Slade Gorton Warren Magnuson Party Republican Democratic Popular vote 936,317 792,052 Percentage 54.17% 45.83% County resultsGorton:      50–60%      60–70%Magnuson:      50–60% U.S. senator before election Warren Magnuson Democratic Elected U.S. Senator Slade Gorton Republican Elections in W...

Nenny TrianaNenny pada tahun 1967Lahir23 Mei 1955 (umur 69)Bandung, Jawa Barat, IndonesiaKebangsaanIndonesiaPekerjaanPemeranpenyanyimodelTahun aktif1967—sekarang R. Nenny Triana (lahir 23 Mei 1955) adalah pemeran, penyanyi, dan model berkebangsaan Indonesia. Karier Nenny berkarier sejak usia anak-anak. Ia kebanyakan berperan sebagai pemeran pendukung, tetapi ia pernah menjadi pemeran utama dalam film Nenny (1968). Filmografi Film Tahun Judul Peran Catatan 1968 Nenny Karya debut 1...

 

Battle of the First English Civil War Battle of Muster Green[1]Part of the First English Civil WarMuster Green (the site of the battle) in 2007DateFirst week of December 1642[2]LocationMuster Green, Haywards Heath, West Sussex50°59′59″N 0°06′33″W / 50.9998°N 0.1092°W / 50.9998; -0.1092Result Parliamentarian victory Royalist army routed Lewes spared from a Royalist assault Royalist advance through Sussex driven backBelligerents Royalists Parl...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (يوليو 2023) أحمد المقري التلمساني معلومات شخصية الميلاد سنة 1578   تلمسان  الوفاة يناير 1632 (53–54 سنة)  القاهرة...

American brand by Nike For the defunct airline, see Air Jordan (airline). Air JordanThe silhouette of Michael Jordan served as inspiration to create the Jumpman logo.Product typeBasketball shoes, clothingOwnerNikeCountryUnited StatesIntroducedNovember 17, 1984; 39 years ago (1984-11-17)[a]MarketsWorldwideWebsitenike.com/jordan This article is part of a series aboutMichael Jordan Career Career achievements The Shot Game 6 of the 1998 NBA Finals 1982 NCAA Championship ...

 

Sporting event delegationLaos at the2011 Southeast Asian GamesIOC codeLAONOCNational Olympic Committee of Laoin Jakarta and PalembangCompetitors55,male=35,female=20 in 12 sportsFlag bearerSaysamone Sengdao (petanque)Officials38,MedalsRanked 34th Gold 0 Silver 1 Bronze 2 Total 3 Southeast Asian Games appearances195919611963196519671969197119731975–1987198919911993199519971999200120032005200720092011201320152017201920212023 Laos participated in the 2nd Asian Beach Games in Muscat, Oman o...

 

Disambiguazione – Se stai cercando altri significati, vedi Belém (disambigua). Questa voce o sezione sull'argomento centri abitati del Brasile non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. BelémcomuneMunicípio de Belém Belém – Veduta LocalizzazioneStato Brasile Stato federato Pará MesoregioneBelém MicroregioneBelém AmministrazioneS...

Luca MariniMarini di tahun 2015Kebangsaan ItaliaLahir10 Agustus 1997 (umur 26)Urbino, ItaliaTim saat iniSky VR46 Esponsorama RacingNo. motor10 Catatan statistik Karier Kejuaraan Dunia Moto2Tahun aktif2015–sekarang PabrikanKalex Klasemen 20187th (147 pts) Start Menang Podium Pole F. lap Poin 53 1 5 2 3 240 Karier Kejuaraan Dunia Moto3Tahun aktif2013 PabrikanFTR Honda Klasemen 2013NC (0 pts) Start Menang Podium Pole F. lap Poin 1 0 0 0 0 0 Luca Marini (lahir di Urbino, Italia pada 10 Agu...

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目需要精通或熟悉相关主题的编者参与及协助编辑。 (2016年2月20日)請邀請適合的人士改善本条目。更多的細節與詳情請參见討論頁。 此條目需要擴充。 (2016年2月20日)请協助改善这篇條目,更進一步的信息可能會在討論頁或扩充请求中找到。请在擴充條目後將此模板移除。 自信(英語:Self-confidence...