Zum Inhalt springen

Empfohlene Beiträge

Geschrieben
Zu den Flags und moeglichen Fehlerkonstanten solltest du einmal in die Manpage schauen

(man 2 open).

Ja, habe ich, dort wird erklärt wer was macht.

Wie formuliere ich

...
#define CDROM "/dev/cdrom"
...
static int open_cdrom (void) {
int fd = open (CDROM, O_RDONLY | O_NONBLOCK);
if (fd == -1) {
if (errno == ENOMEDIUM)
printf ("Keine CD im Laufwerk!\n");
else
perror ("Fehler bei open()");
exit (EXIT_FAILURE);
}
return fd;
}[/PHP]

so um, das es zu meinem Port passt??? Es geht mir besonders um diese Stelle:

[PHP]
...
if (errno == ENOMEDIUM) //Hier geht es mir besonders drum
printf ("Keine CD im Laufwerk!\n");
else
printf ("Fehler bei open()"); // Habe hier perror dur printf ersetzt
exit (EXIT_FAILURE);
...

Thanx,

  • Antworten 67
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Geschrieben

dazu solltest du zuerst schauen was

(errno == ENOMEDIUM)

noch alles in erno stehen kann da du am com-port arbeitest wird wohl die auswertung eNoMedium nicht viel bringen...

vielleicht so was wie eNoInput oder so... da müsstest du nachschauen...


...
#define COM1 "/dev/ttyS0"
...
static int status_com1 (void)
{
int fd = open (COM1, <deine Parameter>);
if (fd == -1) {
if (errno == <wenn kein input>)
printf ("Kein Gerät angeschlossen...\n");
else
perror ("Fehler bei open()");

return (-1);
}
return fd;
}

int main(int argc, char* argv[])
{
int com_status = status_com1();

if (com_status > 0)
{
// was bei angeschlossem bzw. lesbaren Port passieren soll.
}

return 0;
}

[/PHP]

Geschrieben

Also ich habe jetzt mal folgendes zusammengetippt....:


/* port.cpp*/
#include <stdio.h> // Standard input/output definitions
#include <string.h> // String function definitions
#include <unistd.h> // UNIX standard functiondefinations
#include <fcntl.h> // File controll definations
#include <errno.h> // Error number definations
#include <termios.h> // POSIX terminal controll definations
#include <iostream.h>

/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/

#define port "/dev/ttyS0"

static int open_port(void)
{
int fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); // File discriptor for the Port

if (fd == -1)
{
if (errno == ENOTTY)
printf("Kein Gerät angeschlossen !\n");
else
printf("open_port: Unable to open /dev/ttyS0 - \n");

return (-1);
}

return fd;
}

int main(int argc, char* argv[])
{
int fd = open_port();

if (fd > 0)
{
printf("Com1: %d\n", fd);
}
else
{
printf("An Com1 liegen keine Daten an!");
}

return fd;
}
[/PHP]

Er gibt mir nur Com1 aus, sonst nüschts....ich glaube ich habe was vergessen......

Wo habe ich denn jetzt noch was falsch bzw. könnte ich optimieren ???

Geschrieben

Ich habe die main-Funktion jetzt so gecodet:

int main(int argc, char* argv[])
{
int fd = open_port();

if (fd > 0)
{
printf("Com1: %d\n",open_port);
}
else
{
printf("An Com1 liegen keine Daten an!\n");
}

return 0;
}[/PHP]

und bekomme in der Konsole fogendes ausgegeben:

[code]isesrv101:/home/Phade/C-Programme # ./port Com1: 134514316 isesrv101:/home/Phade/C-Programme #[/code]

Ich vermute mal, das das nicht vom Thermostaten kommt, der müsste doch eigentlich viel mehr ausgeben..... Oder irre ich mich da?

Geschrieben

Der Filedeskriptor stellt nur ein Handle dar, mit dem du auf die Schnittstelle zugreifen kannst. Er beinhaltet selbst noch keine ausgelesenen Daten. Daher ergibt es auch keinen Sinn, den "Wert" des Deskriptors auszugeben. Entscheidend ist nur, ob er ungleich Null (nicht größer als Null) ist, denn nur dann hat das Öffnen der Schnittstelle funktioniert.

Geschrieben
Der Filedeskriptor stellt nur ein Handle dar, mit dem du auf die Schnittstelle zugreifen kannst. Er beinhaltet selbst noch keine ausgelesenen Daten. Daher ergibt es auch keinen Sinn, den "Wert" des Deskriptors auszugeben. Entscheidend ist nur, ob er ungleich Null (nicht größer als Null) ist, denn nur dann hat das Öffnen der Schnittstelle funktioniert.

Also könne ich auch als printf sagen Com1 geöffnet, oder nicht???

Dann muss ich also jetzt noch eine Funktion schreiben, die Port ausliest?!!...

Geschrieben

Ich würd erstmal einen Gang zurückfahren. Dein Betrieb sagt du hast soviel Zeit bis du fertig bist. Dann würde ich sagen, fang klein an, lerne jetzt von grundauf C++, am besten durch eines der genannten Tutorials. Vielleicht entdeckst du ja scho nach einer Woche Stellen wo du denkst "Mensch, deshalb ging das bei meinem Code nie!" :)

Geschrieben
Also könne ich auch als printf sagen Com1 geöffnet, oder nicht???

Dann muss ich also jetzt noch eine Funktion schreiben, die Port ausliest?!!...

Ja könntest Du.

Ja musst Du.

Solltest Du die Aufgabe jetzt mit Hilfe des Forums lösen, so gehen deinevorgesetzten aus, dass Du das jetzt alles alleine kannst. Daher könnten deine nächsten Termine etwas eng werden.

Man sieht, dass Du nur eine Idee davon hast, was Du machst.

Geschrieben

Solltest Du die Aufgabe jetzt mit Hilfe des Forums lösen, so gehen deinevorgesetzten aus, dass Du das jetzt alles alleine kannst. Daher könnten deine nächsten Termine etwas eng werden.

Man sieht, dass Du nur eine Idee davon hast, was Du machst.

Hmm, da muss ich dir recht geben. Zum Glück, schreiben wir hier kaum Programme selber, diese Aufgabe war Quasi eine Abschnittsaufgabe, als nächstes komm eine Aufgabe über Netzwerke oder so etwas (verstehst du?).

Aber nichts desto trotz hast du recht, nachher kommt noch einer und sagt, da ich das ja kann müsste ich da mal eben was machen und muss dann bis 12 fertig sein....

Ich werde mal meine Bücher die ich hier habe zu Rate ziehen und natürlich die Links von euch. Falls sich noch Fragen ergebn, werde ich sie dann hier stellen, denn unbedingt ein neues Thema anzufangen wäre ja quatsch....

thanx,

Geschrieben

Hi nochmal,

wie ihr sicher schon richtig vermutet, stehe ich gerade mal wieder auf dem Schlauch.

Und zwar habe ich in meinen Unterlagen gelesen, das man entweder fprintf benutzen kann, oder fputs. Wobei ich dann aber bei fputs noch zusätzlich fp als Zeiger benutzen muss und dann noch fgets....

Jetzt weiß ich nicht so recht, welche von den beiden Optionen nehmen soll. Ist eventuell eine dumme Bildunglücke, aber leider habe ich diese.

(Zudem fehlt mir das Programmierer denken; ich sehen zwar den Quelltext, verstehe auch das meiste, nur fallen mir zum Beispiel Optimiermöglichkeiten nicht auf, oder halt jetzt das mit dem fprintf oder fputs....)

Trotzdem Thanx,

  • 2 Wochen später...
Geschrieben

Hallöchen zum dritten,

bin nun so weit:


/*****************************************************************
******************************************************************
**This C-Code is Freeware. You can use it, or canche something.***
**When you have some upgrades, send me an Email.******************
**stefan.aust1@gmx.net . And now, have a lot of fun !*************
******************************************************************
**The programm was tested on a Linuxsystem************************
******************************************************************
*****************************************************************/

#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */

/* Definition of Port */
#define port "/dev/ttyS0"

/* Open COM1 */
static int open_port(void)
{
char fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); /* fd is the File descriptor for the Port */

if (fd == -1)
{
if (errno == ENOTTY)
printf("NO HARDWARE CONNECTED !\n");
else
printf("open_port: Unable to open /dev/ttyS0 - \n");

return (-1);
}

return fd;
}

/* Status Messages */
int main(int argc, char * argv[])
{
char fd = open_port();

if (fd > 0)
{
printf("Com1 open! \n", &fd);
}
else
{
printf("Com1 not open!!\n");
}

return 0;
}

/* Print Data from COM1 */
static void read_port (char fd)
{
/**Declaration for the read proces**/
/**Hier hänge ich jetzt**/
}
[/PHP]

Aber ich muss sagen das ich nicht weiter weiß und komme. Ich habe jetzt den halben Tag im Netz gesucht und alle meine Bücher gewälzt aber nüschts gefunden..... :(

Das heißt, ich habe schon etwas gefunden, nur verwirrt mich das etwas, in diesem Beispiel wird [i]struct[/i] verwendet. Wäre das "besser"??? Da hänge ich halt jetzt....

thanx,

Geschrieben

Siehst du, da geht es ja schon los, dann kann ich ja lange suchen...

Mein Problem ist die letzte Funktion, die, die den COM1 auslesen soll. Ich weiß nicht, wie ich das hin bekomme. Ich habe ein Beispiel gefunden, wo es um CDs auslesen geht, gefunden und die benutzen halt struct. Und ich weiß nicht, ob ich das jetzt nicht auch benutzen kann oder nicht.....

Geschrieben
Mein Problem ist die letzte Funktion, die, die den COM1 auslesen soll. Ich weiß nicht, wie ich das hin bekomme.
Die passende Funktion heißt read. Ich glaube aber nicht, dass dir die weiterhilft. Im Beispielcode wurden wohl nicht ohne Grund ioctl benutzt.

Ich habe ein Beispiel gefunden, wo es um CDs auslesen geht, gefunden und die benutzen halt struct. Und ich weiß nicht, ob ich das jetzt nicht auch benutzen kann oder nicht.....
Das Problem ist, dass du nicht weißt, was Schlüsselwörter wie struct und static überhaupt bedeuten. Du kannst dieses Problem nicht lösen, ohne vorher den richtigen Umgang mit den Werkzeugen zu lernen.

Code zum Auslesen von CDs bringt dir gar nichts, das hat mit deinem Problem nichts zu tun. Such nicht nach Beispielcode. Du bist nicht in der Lage, für dich hilfreichen Code als solchen zu erkennen. Halte dich an die Dokumentation von open, read und ioctl. Und arbeite ein paar Grundlagentutorials durch. Sonst bist du in einem Jahr noch nicht fertig. Das, was du bisher geschafft hast, sollte selbst bei einem Anfänger eigentlich nicht länger als eine Stunde gedauert haben.

Geschrieben

Nein ich benutze es nicht, sondern in dem Beispiel welches ich gefunden haben wird es benutzt.

Wie meinst du das mit dem nicht unbedingt außerhalb des Programms machen??? Kann ich das in die main-Funktion schreiben??? Ich dachte das das zur Übersicht besser wäre???!!!???

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...