Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Linux/Unix ::  File descriptoren in c++     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Cho++
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
Beitrag 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
Beitrag 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
Beitrag C++ Forumbot Forumbot 01:37:35 17.01.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum Linux/Unix verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22820
Beitrag rüdiger Moderator 14:22:44 17.01.2012   Titel:              Zitieren

__gnu_cxx::stdio_filebuf
Cho++
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2011
Beiträge: 188
Beitrag 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
Beitrag 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
Beitrag 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




Beitrag 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
Beitrag 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




Beitrag 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? :rolleyes:

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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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!
C/C++ Forum :: Linux/Unix ::  File descriptoren in c++   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.