Portál AbcLinuxu, 10. května 2025 05:25
Mám maly_programek, který pouze přečte stdin a vypíše ho na obrazovku. Nejprve předám stdout příkazu cat na stdin tohoto programu pomocí roury cat file |./maly_programek
, pak nasypu soubor na stdin programu pomoci ./maly_programek <file
. V obou případech dostanu dle očekávání stejný výstup.
Problém nastane, když chci, aby stdin použila fce gdk_imlib_load_image(). V případě, že použiji rouru, tak hlásí chybu.
$ cat image.jpg |./example01
gdk_imlib ERROR: Cannot load image: -
All fallbacks failed.
You should not see this. Submit bug against gdk-imlib package.
Load failure
$ ./example01 <image.jpg
Load success
Netušíte v čem může být problém?
Řešení dotazu:
Díky, máte pravdu:
_llseek(0, 0, 0xbfc13290, SEEK_SET) = -1 ESPIPE (Illegal seek)
Tak je to bug v imlib. Nejprve čtou pár bytů ze souboru, aby detekovali typ, pak použijí fci rewind(), ale nepočítají, že stdin bude předávaný přes rouru.
To me tedy dost prekvapuje, ze to jde vubec pres to presmerovani. Jinak standarni vec (ktera aspon driv fungovala) byla registrace dalsiho inputu :
gdk_input_add(fileno(stdin),GDK_INPUT_READ,(void *) stdinput,NULL);
kde stdinput je nejaka funkce ctouci (pres fgets
treba)
std. input a zarizujici loadovani obrazku a pod.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.