.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) .\" and Copyright (c) 2014 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Sat Jul 24 17:51:15 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified 11 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" Modified 14 May 2001, 23 Sep 2001 by aeb .\" 2004-12-20, mtk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH system 3 "2 mai 2024" "Pagini de manual de Linux 6.9.1" .SH NUME sistem \- execută o comandă shell .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH SINOPSIS .nf \fB#include \fP .P \fBint system(const char *\fP\fIcomandă\fP\fB);\fP .fi .SH DESCRIERE Funcția de bibliotecă \fBsystem\fP() se comportă ca și cum ar fi utilizat \fBfork\fP(2) pentru a crea un proces\-copil care să execute comanda shell specificată în \fIcomandă\fP utilizând \fBexecl\fP(3) după cum urmează: .P .in +4n .EX execl("/bin/sh", "sh", "\-c", comandă, (char *) NULL); .EE .in .P \fBsystem\fP() returnează după ce comanda a fost finalizată. .P În timpul executării comenzii, \fBSIGCHLD\fP va fi blocat, iar \fBSIGINT\fP și \fBSIGQUIT\fP vor fi ignorate, în procesul care apelează \fBsystem\fP(); (aceste semnale vor fi tratate în conformitate cu valorile lor implicite în interiorul procesului\-copil care execută \fIcomanda\fP). .P Dacă \fIcomandă\fP este NULL, atunci \fBsystem\fP() returnează o stare care indică dacă un shell este disponibil pe sistem. .SH "VALOAREA RETURNATĂ" Valoarea returnată de \fBsystem\fP() este una dintre următoarele: .IP \[bu] 3 Dacă \fIcomandă\fP este NULL, atunci o valoare diferită de zero dacă este disponibil un shell, sau 0 dacă nu este disponibil niciun shell. .IP \[bu] Dacă un proces\-copil nu a putut fi creat sau starea acestuia nu a putut fi recuperată, valoarea de returnare este \-1 și \fIerrno\fP este configurată pentru a indica eroarea. .IP \[bu] În cazul în care un shell nu a putut fi executat în procesul\-copil, atunci valoarea de returnare este ca și cum shell\-ul copil s\-ar fi încheiat prin apelarea \fB_exit\fP(2) cu starea 127. .IP \[bu] Dacă toate apelurile sistemului reușesc, atunci valoarea de returnare este starea de terminare a shell\-ului copil utilizat pentru a executa \fIcomandă\fP; (starea de terminare a unui shell este starea de terminare a ultimei comenzi pe care o execută). .P În ultimele două cazuri, valoarea de returnare este o „stare de așteptare” care poate fi examinată utilizând macrocomenzile descrise în \fBwaitpid\fP(2); (și anume, \fBWIFEXITED\fP(), \fBWEXITSTATUS\fP() și așa mai departe). .P \fBsystem\fP() nu afectează starea de așteptare a niciunui alt copil. .SH ERORI\-IEȘIRE \fBsystem\fP() poate eșua cu oricare dintre aceleași erori ca \fBfork\fP(2). .SH ATRIBUTE Pentru o explicație a termenilor folosiți în această secțiune, a se vedea \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interfață Atribut Valoare T{ .na .nh \fBsystem\fP() T} Siguranța firelor MT\-Safe .TE .SH STANDARDE C11, POSIX.1\-2008. .SH ISTORIC POSIX.1\-2001, C89. .SH NOTE \fBsystem\fP() oferă simplitate și confort: se ocupă de toate detaliile apelurilor \fBfork\fP(2), \fBexecl\fP(3) și \fBwaitpid\fP(2), precum și de manipulările necesare ale semnalelor; în plus, shell\-ul efectuează substituțiile obișnuite și redirecționările de In/Ieș pentru \fIcomandă\fP. Principalul cost al \fBsystem\fP() este ineficiența: sunt necesare apeluri de sistem suplimentare pentru a crea procesul care rulează shell\-ul și pentru a executa shell\-ul. .P Dacă macrocomanda de testare a caracteristicii \fB_XOPEN_SOURCE\fP este definită (înainte de includerea fișierelor de antet \fIany\fP), atunci macrocomenzile descrise în \fBwaitpid\fP(2) (\fBWEXITSTATUS\fP(), etc.) sunt disponibile atunci când se include \fI\fP. .P După cum s\-a menționat, \fBsystem\fP() ignoră \fBSIGINT\fP și \fBSIGQUIT\fP. Acest lucru poate face ca programele care îl apelează dintr\-o buclă să nu poată fi întrerupte, cu excepția cazului în care au ele însele grijă să verifice starea de ieșire a copilului. De exemplu: .P .in +4n .EX while (ceva\-orice) { int ret = system("foo"); \& if (WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) break; } .EE .in .P În conformitate cu POSIX.1, nu este specificat dacă gestionarii înregistrați folosind \fBpthread_atfork\fP(3) sunt apelați în timpul executării \fBsystem\fP(). În implementarea glibc, astfel de gestionari nu sunt apelați. .P Înainte de glibc 2.1.3, verificarea disponibilității \fI/bin/sh\fP nu era efectuată dacă \fIcomandă\fP era NULL; în schimb, se presupunea întotdeauna că este disponibil, iar \fBsystem\fP() returna întotdeauna 1 în acest caz. Începând cu glibc 2.1.3, această verificare este efectuată deoarece, chiar dacă POSIX.1\-2001 cere ca o implementare conformă să furnizeze un shell, acel shell poate să nu fie disponibil sau executabil dacă programul apelant a apelat anterior \fBchroot\fP(2) (care nu este specificat de POSIX.1\-2001). .P .\" Este posibil ca comanda shell să se încheie cu o stare de 127, ceea ce produce o valoare de returnare \fBsystem\fP() care nu poate fi distinsă de cazul în care un shell nu a putut fi executat în procesul\-copil. .SS Avertismente Nu utilizați \fBsystem\fP() dintr\-un program privilegiat (un program set\-user\-ID sau set\-group\-ID, sau un program cu capacități) deoarece valorile ciudate pentru unele variabile de mediu ar putea fi utilizate pentru a submina integritatea sistemului. De exemplu, \fBPATH\fP ar putea fi manipulată astfel încât un program arbitrar să fie executat cu privilegii. Utilizați în schimb familia de funcții \fBexec\fP(3), dar nu \fBexeclp\fP(3) sau \fBexecvp\fP(3) (care utilizează de asemenea variabila de mediu \fBPATH\fP pentru a căuta un executabil). .P \fBsystem\fP(), de fapt, nu va funcționa corect din programe cu privilegii set\-user\-ID sau set\-group\-ID pe sisteme pe care \fI/bin/sh\fP este bash versiunea 2: ca măsură de securitate, bash 2 renunță la privilegii la pornire; (Debian utilizează un shell diferit, \fBdash\fP(1), care nu face acest lucru atunci când este invocat ca \fBsh\fP). .P Orice intrare a utilizatorului care este utilizată ca parte a comenzii \fIcomandă\fP ar trebui să fie \fIcu atenție\fP igienizată, pentru a se asigura că nu sunt executate comenzi de shell sau opțiuni de comandă neașteptate. Astfel de riscuri sunt deosebit de grave atunci când se utilizează \fBsystem\fP() dintr\-un program privilegiat. .SH ERORI .\" [BUG 211029](https://bugzilla.kernel.org/show_bug.cgi?id=211029) .\" [glibc bug](https://sourceware.org/bugzilla/show_bug.cgi?id=27143) .\" [POSIX bug](https://www.austingroupbugs.net/view.php?id=1440) Dacă numele comenzii începe cu o cratimă, \fBsh\fP(1) interpretează numele comenzii ca o opțiune, iar comportamentul este nedefinit; (consultați opțiunea \fB\-c\fP pentru \fBsh\fP(1)). Pentru a rezolva această problemă, precedați comanda cu un spațiu, ca în următorul apel: .P .in +4n .EX system(" \-unfortunate\-command\-name"); .EE .in .SH "CONSULTAȚI ȘI" \fBsh\fP(1), \fBexecve\fP(2), \fBfork\fP(2), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBwait\fP(2), \fBexec\fP(3), \fBsignal\fP(7) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .