[so] [Tema 2]io_flags

Adrian Stanciu adrian.stanciu.pub at gmail.com
Wed Apr 1 12:43:39 EEST 2015


2015-04-01 12:15 GMT+03:00 Andrei Tuicu <andrei.tuicu at gmail.com>:
>
> În data de 1 aprilie 2015, 12:08, Radu MALUŞ <so at cursuri.cs.pub.ro> a scris:
>>
>>
>> > On 01 Apr 2015, at 00:34, Adrian Stanciu <adrian.stanciu.pub at gmail.com>
>> > wrote:
>> >
>> > 2015-03-31 23:48 GMT+03:00 Radu MALUŞ <so at cursuri.cs.pub.ro>:
>> >> Salut,
>> >>
>> >> Am doua probleme cu testele pentru tema 2.
>> >>
>> >> Prima e in legatura cu testul 4: Testing append redirect operators
>> >> Este singurul care imi pica, rulat pe masina virtuala.
>> >> Am observat ca nu am output corect pentru comanda: ./main &> out2.txt
>> >> unde, in fisierul rezultat nu am decat output-ul iesirii standard, nu si a
>> >> iesirii de eroare standard.
>> >> Se pare ca problema vine de la io_flags, valoare care nu e setata nici
>> >> pe IO_OUT_APPEND nici pe IO_ERR_APPEND si, cred eu, din cauza asta fisierul
>> >> in care se face redirectarea este rescris la a doua redirectare.
>> >> Ar trebui sa ma astept sa am setat io_flags? Nu ar trebui sa aiba una
>> >> din cele doua valori de mai sus in cazul redirectarii multiple (adica si
>> >> stdout si err)?
>> >>
>> >
>> > Câmpul io_flags va avea ambii biți setați în cazul prezentat de tine.

Într-adevăr, afirmația asta nu este corectă, acei biți sunt folosiți
doar pentru modul append.

>> >
>> >> A doua e in legatura cu testul 0, unde imi spune “line over 80
>> >> characters” pentru o linie care nu are maimult de 80 de caractere, ci are
>> >> 73.
>> >> Nu inteleg de unde vine eroarea. Caracterele tab nu sunt numarate ca
>> >> avand 4 spatii?
>> >>
>> >
>> > Implicit tab-ul este de 8 caractere. Depinde cum e la tine.
>> >
>> >
>> > Adrian
>>
>> Multumesc pentru raspunsuri.
>> Partea cu lungimea liniei am rezolvat-o.
>>
>> In schimb la io_flags, probabil nu fac eu ceva bine. Nu imi este setat
>> niciun flag in cazul testului mentionat mai sus.
>> Verificarea flag-urilor este ca in exemplul din DisplayStructure.cpp:
>> s->io_flags & IO_OUT_APPEND.
>
>
> Salut!
>
> Operatorul &> nu scrie in modul append, de aceea nu vei avea setat niciun
> bit in io_flags, ceea ce face in schimb e sa-ti redirecteze atat STDOUT-ul
> cat si STDERR-ul la _acelasi_ fisier. Cel mai probabil tu nu verifici ca
> cele 2 string-uri sunt egale si deschizi de 2 ori fisierul, iar in loc sa
> dai dup2 pe acelasi _descriptor_ de fisier, dai dup2 pe 2 descriptori de
> fisier diferiti care doar refera acelasi fisier. Aceasta este singura
> explicatie pe care o vad pentru comportamentul descris de tine; l-am avut si
> eu.
>

Acesta ar trebui să fie răspunsul corect. Mulțumesc, Andrei.


Adrian


More information about the so mailing list