[so] [Tema1][Windows]Sistem de fisiere
Flamaropol Daniel
raptorclw at gmail.com
Tue Mar 10 16:26:01 EET 2009
Salut si mersi pentru raspuns!
Am dat exemplul cu pwd tocmai pentru ca este cel mai simplu. Pentru a
ajunge la modul cum folosesc GetCurrentDirectory() voi arata mai multi
pasi din executia si testarea temei :
1. Masina virtuala accesata prin ssh, direct in cygwin.
2. Pornit Tema1.exe
**.1.Tema acceseaza directorul curent pentru a sti cu ce parametrii sa
porneasca procesele copii ( il iau cu GetCurrentDirectory() si il
stochez local. Aceasta este primul si ultimul apel al acestei functii)
3.O simpla comanda cd _ceva_
**.1. Tema incearca sa faca urmatoarele 2 operatii, in speranta ca una
dintre ele va fi intoarce true :
**.2. SetCurrentDirectory(currentPath + _ceva_)
**.3. SetCurrentDirectory(_ceva_)
**.4. Daca vreuna dintre ele intoarce true, inseamna ca directorul
respectiv exista si voi face schimbarea.
4.O simpla comanda echo "ceva" > /tmp/fisier.txt
**.1 Tema incearca sa creeze fisierul folosind CreateFile()
**.2 CreateFile() intoarce CANNOT_FIND_FILE
5.Comanda whoami
**.1 Tema intoarce "Administrator"
**.2 comanda scrisa in afara temei (prin ssh) intoarce
"scarlet/administrator"
6.Comanda whoami --help
**.1 Tema intoarce "Incorrect syntax, try whoami /? instead"
**.2 comanda scrisa in afara temei ( prin ssh ) intoarce help-ul lui whoami
Concluzii :
1. Pentru Windows, sistemul de fisiere virtual cygwin nu exista.
2. Daca exista o functie ( echo, whoami, etc ) care exista deja in
Windows, aceea va fi apelata prima, si nu echivalentul ei din cygwin.
Aceasta poate induce probleme cu numarul de parametrii, formatul lor si
poate chiar modul de executie al comenzii.
Comentarii :
La punctul 2, am avut surpriza sa observ ca executabilul compilat pe
masina mea locala ( in mod suprinzator, tot Windows Server 2003 R2 ) nu
executa pe masina virtuala ( "Permission Denied", desi am incercat sa ii
modific drepturile, etc ). In schimb cel compilat pe masina virtuala
ruleaza fara probleme.
La punctul 3, orice nu contine un path valid windows nu este recunoscut
de SetCurrentDirectory(). presupunand ca o comanda de tipul "cd
/tmp/ceva" se executa corect prin ssh, dupa ce intru in mini-shell, ea
esueaza.. in schimb comenzile de tipul "cd c:/cale/care/exista" vor
merge intotdeauna.
La punctul 4, CreateFile() poate crea orice fisier pe care de exemplu
l-as putea crea din notepad ( folosind deci sistemul de fisiere de
dedesubt, din windows) dar refuza cu desavarsire sa recunoasca caile
cygwin. ( Exemplu : intru in cygwin , scriu notepad si astfel obtin o
aplicatie deschisa de cygwin, teoretic in mediul propriu de fisiere.
save as ma duce in caile standard Windows, daca scriu ceva de genul
"/tmp/a.txt" bineinteles ca nu il va recunoaste. Ei bine, si tema mea se
comporta la fel).
Practic, nu stiu ce sa ii fac cygwinului sau functiei CreateProcess
astfel incat noile comenzi sa fie executate in mediul lui si nu in
mediul nativ Windows.
In mod normal, as sugera testarea fara cygwin ( practic pastrand
functionalitatea comenzilor ls, grep, etc, dar pierzand caile tipice
linux , /etc/services ). Stiu insa ca temele de anii trecuti au mers
corectate asa, deci evident nu fac eu ceva bine. Trebuie sa apelez
intr-un anumit fel CreateProcess, sau aplicatia nu porneste
corespunzator ? M-am gandit ca s-ar putea sa fie ceva legat de modul cum
aplicatia mea mosteneste ( sau nu ) anumite atribute de la aplicatia
parinte (cygwin) dar nu am reusit sa fac nimic in legatura cu asta.
Nu as fi atat de insistent daca tema mea nu ar merge perfect pe testele
01-15, daca fac manual urmatoarele schimbari :
1. whoami --help ==> whoami /?
2. /tmp ==> C:\Temp ( si toate celelalte path-uri redirectate catre
foldere sau fisiere text care exista, dupa caz )
3. $USER ==> $OS ( windows nu defineste default $USER )
4. TOATE apelurile de tipul "./ceva" in apeluri de tipul "ceva"
Multumesc daca ati citit pana aici
Numai bine,
Dani
More information about the so
mailing list