invalid lvalue in assignment
Michal Krause
michal na krause.cz
Čtvrtek Prosinec 2 17:50:23 CET 1999
On 12/02/99 14:08, Michal Ludvig wrote:
> Zdravim,
> potreboval bych malou pomoc. Mam nasledujici programek:
>
> #include <stdio.h>
> int main(int argc, char *argv[])
> {
> FILE *logfile;
>
> if((logfile=fopen(argv[1], "w")))
> stderr=logfile;
> else
> {
> printf("Nepovedlo se otevrit logfile\n");
> logfile=stderr;
> }
> }
>
> Kdyz ho zkusim skompilovat na glibc 2.x tak to jde. Kdyz to zkusim na
> libc5 (RedHat vicemene 4.x, kernel 2.0.35), tak dostanu nasledujici
> hlasku:
>
> MedaBeda:/ttt$ gcc -o tst tst.c
> tst.c: In function `main':
> tst.c:7: invalid lvalue in assignment
>
> Co s tim? Blbe je prirazeni "stderr=logfile", ale jak to mam obejit?
Specifikace C neurcuje, zda stdin/stdout/stderr jsou makra nebo
promenne. Pokud je to makro, nelze ho samozrejme dat na levou stranu
prirazeni. S tou kompilaci na glibc 2.x bych si nebyl jisty. Verze 2.0
totiz podle me pouziva makro a verze 2.1 promennou.
Obejit to lze a myslim, ze by nasledujici reseni melo byt i
prenositelne:
int logfile;
logfile = open(argv[1], O_WRONLY);
close(2);
dup(logfile);
A dale pak uz pouzivate vsude jenom stderr. Takhle jde presmerovat za
chodu i stdout (1) a asi i stdin (0, logfile musi byt samozrejme
O_RDONLY).
S pozdravem
--
Michal Krause /\
ICQ: 7665279 Informace (nejenom) ze sveta Linuxu /\/ \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz
Co napsat do signatury, aby to nikoho nepohorsilo? Snad jedine nejakou
obecne znamou pravdu. Doufam, ze vsichni vite, ze tucnak je bylozrava ryba.
Další informace o konferenci Linux