PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysteriöses gcc-Problem



16-11-2000, 21:32
Hi,

folgendes Programm macht überhaupt nicht das, was es soll. Es gibt nichtmal den printf in der 3. Zeile aus, es passiert eigentlich überhaupt nichts. Ich kann noch tippen und enter drücken, das steht dann auch toll da aber mehr nicht. Unter Windows klappts einwandfrei. Schauts euch mal an, die Nuß (wenns denn eine ist):

Danke, Sion

<pre>
//allgemeine Bibliotheken
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;

//nur Windows zum Testen
#if defined(_WIN32)
#include &lt;io.h&gt;
void set_pin(int i) {(i);};
void clear_pin(int i) {(i);};
void usleep(int i) {(i);};
int pin_init_user(int i) {return 0;};
void pin_output_mode(int i) {(i);};
#define LP_PIN01 (1 &lt;&lt; 16)
#define LP_PIN02 (1 &lt;&lt; 0)
#define LP_PIN03 (1 &lt;&lt; 1)
#define LP_PIN04 (1 &lt;&lt; 2)
#define LP_PIN14 (1 &lt;&lt; 2)
#define LP_PIN16 (1 &lt;&lt; 2)
#define LP_PIN17 (1 &lt;&lt; 2)
#define LPT2 0x278
#define LP_DATA_PINS 1
#else //nur Linux
#include "parapin.h"
#endif

#define LPT_PORT LPT2
#define MAIL_ENTRIES 2 //hier anpassen
#define WAIT 10 //wie viele Sekunden zwischen Mailchecken warten

int init_led(void);
int file_zero(char *);

struct mail_entry
{
char file[50];
int pin;
};

//////////////////////////////
// main
//////////////////////////////
int main(void)
{
struct mail_entry me[MAIL_ENTRIES];
int i;

printf("1st");

// Hier anpassen
strcpy(me[0].file, "/var/spool/mail/root");
me[0].pin = LP_PIN01;
strcpy(me[1].file, "/var/spool/mail/user");
me[1].pin = LP_PIN02;

if (init_led() != 0) {printf("Fehler!"); return 1;}

//die einzelnen Postfächer abfragen und entsprechend die LED's schalten
while (1)
{
for (i=0; i &lt; MAIL_ENTRIES; i++)
{
if (file_zero(me[i].file) == 1) {set_pin(me[i].pin);printf("%s ist an", me[i].file);}
else {clear_pin(me[i].pin);printf("%s ist aus", me[i].file);}
}
usleep(1000*1000*WAIT);
}
return 0;
}

//////////////////////////////return=1 falls größer 0
// prüft, ob datei größer 0 =0 falls gleich 0
////////////////////////////// =-1 bei Fehler
int file_zero(char *fps)
{
int fp;
if ((fp=open(fps, O_RDONLY)) == -1) return -1;
if (lseek(fp, 1, SEEK_SET) != 1) return 0;
else return 1;
}

//////////////////////////////return=0 falls erfolgreich
// initialisiert LPT-PORT =1 falls Fehler
//////////////////////////////
int init_led(void)
{
if (pin_init_user(LPT_PORT) &lt; 0) return 1;
pin_output_mode(LP_PIN01|LP_DATA_PINS|LP_PIN14|LP_ PIN16|LP_PIN17);
return 0;
}

</pre>


[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]

[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]

thommy
17-11-2000, 07:40
Ich rate mal ins Blaue hinein... Du hast Dein Programm "test" genannt???

Thomas

17-11-2000, 19:25
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von thommy:
Ich rate mal ins Blaue hinein... Du hast Dein Programm "test" genannt???

Thomas[/quote]

Neee, die C-Datei heißt otest.c und das fertig kompilierte led, daran liegts auch nicht, wenn ich es mit ./ am Anfang aufrufe... test allein verhält sich auch anders, es beendet sich nämlich. Trotzdem danke, mal sehen was noch so kommt...

Sion

Hagen von Tronje
19-11-2000, 15:31
Oh, ein \n hat bei printf() schon manches Wunder bewirkt http://www.linuxforen.de/ubb/wink.gif

Hagen

Warum verwendest Du nicht sleep(),
sollte NT, da POSIX.1 konform doch auch haben ?

thommy
20-11-2000, 09:08
Die Programmteile, die zu gepostet hast, funktionieren an sich. Entweder liegt der Fehler im Übersetzungsvorgang (ich glaube nicht, dass es am Compiler selbst liegt; eher an Deinem Aufruf) oder er liegt in "parapin.h".

Thomas

21-11-2000, 21:35
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von Hagen von Tronje:
Oh, ein \n hat bei printf() schon manches Wunder bewirkt http://www.linuxforen.de/ubb/wink.gif
[/quote]

geil, mal wieder voll reingefallen... Danke!


Sion