Puslapiai: 1
Šiandien radau gan įdomų bug'ą ( gal greičiau TCP ypatybę ). Pasirodo, kai kažką siunti per TCP, jis praskipina '\0' ( string end )
Tarkim:
n = read ( client_socket, buffer, 255 );
popen ( buffer, "r" );
Praneš apie klaidą, jog "tuščios" komandos nėra. Realiai jin yra, tačiau be '\0' ir execl(), kuris yra popen(); funkcijoje neperduoda visko teisingai sh'ui;
: command not found
Sprendimas yra gan paprastas:
n = read ( client_socket, buffer, 255 );
buffer[n - 2] = '\0';
popen ( buffer, "r" );
Ir viskas kuo puikiausiai veikia.
Tam išsiaiškinti man prireikė viso ryto. Vis galvojau, kad ne tokio cont'o char array paduodu..
Gan ekonomiškas tas TCP.
Arch Linux Lietuva
Atsijungęs
Kažkaip man tas praskipinimas užbaigimo stringo keistai atrodo. Nepastikėjimą kelia.
Atsijungęs
Na, viso to galima išvengti pasitelkus bibliotekas ( arba pačiam tokią parašyti ), tai to nepasitikėjimo galima išvengti.
Iš kitos pusės, tai per TCP yra siunčiamas ne tik char buffer, bet ir binariniai paketai, o jiems "\0" tikrai nėra reikalingas.
Šiaip, tai man galėjo nutikti ir dėl to, kad klientą prie serverio naudojau telnet'ą. Dabar rašysiu jau savo ir klientą, tai galėsiu pilnai valgyti siunčiamą informaciją.
Arch Linux Lietuva
Atsijungęs
Gal jau laikas ir temos pavadinimą pakeist į racionalesnį, labiau atspindintį probleminę situaciją ; ) ?
Nes:
1, neegzistuoja ryšys tarp C ir TCP;
2, char buffer niekam nieko nesako (sako tiek pat, kiek ir "unsigned int buffer" -- C kalboje viskas yra ints;)
3, situacija susijusi ne su TCP steku, o su klientine Telnet programa.
Atsijungęs
Puslapiai: 1