| Autor |
Nachricht |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
01:07:54 17.01.2012 Titel: |
File descriptoren in c++ |
Zitieren |
Hallo,
Ich habe mir das Buch Linux Unix programmierung von Galileo
Computing zugelegt . Jetzt möcht ich die Beispiele mit den
fd in c++ streams aendern . Als ich im google gesucht habe bin ich auf das gestossen :
http://www.ginac.de/~kreckel/fileno/
versteh da in dem Link aber nicht viel ..
Es waere net wenn ihr hilfreiche Links haettet oder mir des erklaeren
könntet .
Liebe Grüsse :confused: |
_________________ no risk no fun!
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
01:37:23 17.01.2012 Titel: |
|
Zitieren |
Was hat diese Frage mit C++ zu tun? Und was genau möchtest du überhaupt wissen?
Der Galileo-Verlag übrigens hat einen sehr schlechten Ruf, was die Qualität seiner Lehrbücher angeht. |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 16160
|
C++ Forumbot Forumbot
01:37:35 17.01.2012 Titel: |
|
Zitieren |
|
 |
rüdiger
Moderator
Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22820
|
rüdiger Moderator
14:22:44 17.01.2012 Titel: |
|
Zitieren |
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
23:17:14 19.01.2012 Titel: |
|
Zitieren |
Wegen der Schule etc. hat ich diese Woche nicht so viel Zeit vielen Dank ! |
_________________ no risk no fun!
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
00:33:27 20.01.2012 Titel: |
|
Zitieren |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define CDROM "/dev/cdrom"
using namespace std;
static int open_cd()
{
ifstream fin;
filebuf f;
f.open (CDROM,ios::in | ios::out);
int fd = f.is_open();
if(fd==-1)
cerr<<"Datei kann nicht geöffnet werden \n";
return fd;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
cerr<< "Geht nicht \n";
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define CDROM "/dev/cdrom"
using namespace std;
static int open_cd()
{
ifstream fin;
filebuf f;
f.open (CDROM,ios::in | ios::out);
int fd = f.is_open();
if(fd==-1)
cerr<<"Datei kann nicht geöffnet werden \n";
return fd;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
cerr<< "Geht nicht \n";
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define CDROM "/dev/cdrom"
using namespace std;
static int open_cd()
{
ifstream fin;
filebuf f;
f.open (CDROM,ios::in | ios::out);
int fd = f.is_open();
if(fd==-1)
cerr<<"Datei kann nicht geöffnet werden \n";
return fd;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
cerr<< "Geht nicht \n";
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
Ich führs aus wird compiliert etc. bekomm dann ne meldung Geht nicht. |
_________________ no risk no fun!
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
01:56:25 20.01.2012 Titel: |
|
Zitieren |
Wenn ich mal ein eigenes Betriebssystem schreibe, dann werden sämtliche Fehlermeldungen nur noch "Geht nicht" und "Funktioniert nicht" sein. Das ist viel anfängerfreundlicher. |
|
|
|
 |
seldon
Unregistrierter
|
seldon Unregistrierter
08:17:36 20.01.2012 Titel: |
|
Zitieren |
Hat der ausführende Benutzer die passenden Rechte für /dev/cdrom? Auf den meisten gängigen Systemen ist diese Frage identisch mit: Ist der User Teil der Gruppe cdrom? |
|
|
|
 |
rüdiger
Moderator
Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22820
|
rüdiger Moderator
13:53:06 20.01.2012 Titel: |
|
Zitieren |
1. Dein Code ist nicht einmal richtig eingerückt. Damit fängt es an. Wenn du den Code nicht richtig einrückst, ist er unleserlich und du machst Fehler.
2. Das System sagt dir ja genau, was du falsch gemacht hast. Also lies auch die Fehlermeldung des Systems genau aus. Am einfachsten mit perror(3)
| C/C++ Code: | if(ioctl(...) == -1) {
perror("ioctl");
}
| |
| C/C++ Code: | if(ioctl(...) == -1) {
perror("ioctl");
}
| |
| C/C++ Code: | if(ioctl(...) == -1) {
perror("ioctl");
}
| |
3. int fd = f.is_open();
Das gibt dir nicht den Dateihandle zurück! Siehe http://www.cplusplus.com/reference/iostream/filebuf/is_open/
Nimm am besten open(2) anstelle die C++-Streams für Device-Sachen. |
|
|
|
 |
Ethon__
Unregistrierter
|
Ethon__ Unregistrierter
13:57:17 20.01.2012 Titel: |
|
Zitieren |
Euch ist schon aufgefallen dass hier versucht wird den bool-Rückgabewert von is_open() als Filedeskriptor zu nutzen, oder?
Antwort: Nimm open() und keine C++-Streams. Du willst weder etwas gepuffertes noch Abstraktionsebenen für die File-API. |
|
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
22:52:25 20.01.2012 Titel: |
|
Zitieren |
Ich dachte mir das das auch mit den fstreams geht. |
_________________ no risk no fun!
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
23:36:05 20.01.2012 Titel: |
|
Zitieren |
Hmm jetzt kommt Fehler :
Eject yourself
: input/output error
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
|
_________________ no risk no fun!
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
16:20:38 24.01.2012 Titel: |
|
Zitieren |
Hmm ? |
_________________ no risk no fun!
|
|
 |
Cybertec
Mitglied
Benutzerprofil
Anmeldungsdatum: 08.12.2008
Beiträge: 463
|
Cybertec Mitglied
17:04:56 24.01.2012 Titel: |
|
Zitieren |
Welche Header hast du denn überhaupt eingebunden?
Mir scheint als ob da noch was fehlen würde? |
|
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 581
|
pyhax Mitglied
17:08:45 24.01.2012 Titel: |
|
Zitieren |
Ich habe die Lösung gefunden:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROM_LOCKDOOR, 0) < 0) {
perror("Unlock door\n");
}
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROM_LOCKDOOR, 0) < 0) {
perror("Unlock door\n");
}
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | static int open_cd()
{
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;
}
static void open_tray (int cdrom)
{
if(ioctl (cdrom, CDROM_LOCKDOOR, 0) < 0) {
perror("Unlock door\n");
}
if(ioctl (cdrom, CDROMEJECT)== -1)
{
perror ("Eject yourself\n");
exit (EXIT_FAILURE);
}
}
int main()
{
int fd = open_cd();
open_tray(fd);
}
| |
Wichtig ist, das das Device nicht gemounted ist. |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
17:25:37 24.01.2012 Titel: |
|
Zitieren |
| Code: | Unlock door
: Device or resource busy
Eject yourself
: Input/output error
| |
| Code: | Unlock door
: Device or resource busy
Eject yourself
: Input/output error
| |
| Code: | Unlock door
: Device or resource busy
Eject yourself
: Input/output error
| |
Weis meinste den damit wie kann ich das gucken obs gemountet ist ? |
_________________ no risk no fun!
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 581
|
pyhax Mitglied
17:35:21 24.01.2012 Titel: |
|
Zitieren |
mach mal: (in der Konsole) umount /dev/cdrom und starte erst danach das Program. |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
nman
Moderator
Benutzerprofil
Anmeldungsdatum: 19.02.2002
Beiträge: 12947
|
nman Moderator
18:01:36 24.01.2012 Titel: |
|
Zitieren |
| pyhax schrieb: | | C/C++ Code: | if(errno = ENOMEDIUM)
printf("Keine CD im Laufwerk\n"); | |
| C/C++ Code: | if(errno = ENOMEDIUM)
printf("Keine CD im Laufwerk\n"); | |
| C/C++ Code: | if(errno = ENOMEDIUM)
printf("Keine CD im Laufwerk\n"); | |
|
Siehst du den Bug? |
_________________ …but tuesday's just as bad.
|
|
 |
Cho++
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
|
Cho++ Mitglied
18:46:11 24.01.2012 Titel: |
|
Zitieren |
Jetzt versteh ich auch nichts mehr es ging die ganze Zeit nicht Laptop
abgestürzt und jetzt kommt das :
| Code: | Unblock door
:Device or resource busy
| |
| Code: | Unblock door
:Device or resource busy
| |
| Code: | Unblock door
:Device or resource busy
| |
Aber er öffnet den Laufwerk und mach was ich im sage xD |
_________________ no risk no fun!
|
|
 |