Salutare, On Fri, 2016-03-18 at 22:35 +0200, Mihai Catalin Arsenescu via so wrote: > Buna ziua/seara / Salut, > Imi pica testul 5 pe linux, iar cand iau operatiile "la mana" > programul meu face ce trebuie(din punctul meu de vedere). Am > urmatoarele nelamuriri: > 1) O diferenta intre programul meu si bash este eroarea data de o > comanda "cd _director_", unde _director_ nu exista. Bash-ul afiseaza > no such file or directory, iar eu observ ca chdir() intoarce -1 si > afisez un mesaj de eroare propriu. Aici este problema ?
Nope, nu aici e problema. La testul 5 nu se iau în considerare mesajele de eroare. Deci poți să afișezi ce mesaj vrei. > 2) Bash la o comanda "cd _director_ > out.txt", creeaza fisierul > out.txt chiar daca nu are nimic de scris. Aici e problema, de aici vine diferența. > Din enuntul temei si > separarea comenzii cd ca fiind o comanda interna inteleg ca nu trebuie > implementata ca o comanda simpla(cu fork()), ci trebuie apelata o > functie care schimba directorul de lucru al procesului(e.g. chdir()). > Am inteles bine? Da, ai înțeles bine. > Daca da, trebuie sa suport redirectari pe comenzi > interne(mai specific cd) ? Da, așa cum face și bash-ul. > Daca da, de ce se mai face separarea, de > ce nu e cd o comanda ca toate celelalte? Știi vreun binar/executabil care să se numească 'cd' și să facă 'change current directory'? Întreb și pentru Linux și pentru Windows. Directorul current (sau current working directory - CWD) are sens doar în contextul unui proces. Structura care conține informațiile procesului (PCB - Process Control Block) conține și CWD [1]. Deci e caracteristic procesului curent. Dacă aș avea un 'cd.exe' nu m-ar ajuta prea tare, pentru că eu - procesul curent - tot trebuie să-mi modific CWD-ul din PCB-ul meu, care stă în kernel, printr-un apel de sistem (chdir). Pentru orice comandă se procesează redirectările mai întâi, fie că avem comandă internă (shell builtin), fie că avem comandă externă. E o generalizare. Comanda 'cd' e un shell builtin. Un shell builtin poate să output-eze ceva (vezi comanda 'pushd ~' în bash) și asta înseamnă că mie ca utilizator îmi este utilă și redirectarea. [1] http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-03#prezentare_concepte Costin _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii