[so] [Tema2][Linux][Test 5][Comanda cd]

Costin Lupu costin.lup at gmail.com
Fri Mar 18 23:46:52 EET 2016


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



More information about the so mailing list