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