-
mysteriöses gcc-Problem
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
//nur Windows zum Testen
#if defined(_WIN32)
#include <io.h>
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 << 16)
#define LP_PIN02 (1 << 0)
#define LP_PIN03 (1 << 1)
#define LP_PIN04 (1 << 2)
#define LP_PIN14 (1 << 2)
#define LP_PIN16 (1 << 2)
#define LP_PIN17 (1 << 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 < 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) < 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.]
-
Ich rate mal ins Blaue hinein... Du hast Dein Programm "test" genannt???
Thomas
-
<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
-
Oh, ein \n hat bei printf() schon manches Wunder bewirkt
Hagen
Warum verwendest Du nicht sleep(),
sollte NT, da POSIX.1 konform doch auch haben ?
-
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
-
<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
[/quote]
geil, mal wieder voll reingefallen... Danke!
Sion
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen