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