Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » ioctl Probleme

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.02.2009, 13:04 Uhr
~Keros
Gast


Hi

Ich beschäftige mich gerade unter Linux in c++ mit ioctl und komme irgendwie damit nicht klar. Bzw mit dem Debuggen dieser Funktion.

OS: Xubuntu 8.10
cat /proc/scsi/sg/version
30534 3.5.34 [20061027]


Code:
unsigned char dbg = 0x01;
int err = ioctl(fd, SG_SET_DEBUG, &dbg);
printf ("Debug Error: %d\n", err);

unsigned char buff[4];
for(int i = 0; i < 4; i++)
{
    buff[i] = 0x00;
}

err = ioctl(fd, SG_GET_VERSION_NUM, buff);
printf ("Version Error: %d\n", err);
printf ("Versionsnummer: ");
for (int i = 0; i < 4; i++)
{
    printf ("%d", buff[i]);
}
printf ("\n");
if (ioctl (fd, SG_IO, &sg_io))
{
    return -1;
}



Ausgabe:[tt]
Debug Error: -1
Version Error: 0
Versionsnummer: 6311900
[/tt]

ioctl (fd, SG_IO, &sg_io) liefert auch -1.

Restlichen Variablen:
fd = 3 (int)

Code:
/*
* O_RDWR is expected to provide for none set-root-uid
* execution under Linux kernel 2.6[.8]. Under 2.4 it
* falls down to O_RDONLY...
*/
fd = open (file, O_RDWR|O_NONBLOCK)



sg_io

Code:
// read10 command
cmd[0] = 0x28; // READ 10
cmd[1] = 0x00; // DPO, FUA
cmd[2] = address;
cmd[3] = address;
cmd[4] = address;
cmd[5] = address;
cmd[6] = 0x00; // Reserved, Restricted
cmd[7] = SECTORS ;
cmd[8] = SECTORS;
cmd[9] = 0x00; // Control



Device: "/dev/cdrom3" -> USB CDRom

Das Read10 commando funktioniert (ioctl (fd, SG_IO, &sg_io) gibt nicht -1 aus)
Auch test Uinit Ready commands bzw write commands funktionieren einwandfrei.

Allerdings gibt es speziell für diese Laufwerk zusätzliche Kommandos. Eines davon funktioniert aber bei 2 anderen hakts jetzt. Wenn ich die Befehle nach Spezifikation zusammenbaue und sende gibt mir ioctl (fd, SG_IO, &sg_io) immer -1 zurück. Ich weiß allerdings nicht wieso. Und da ich es auch nicht schaffe ioctl dazu zu bewegen mir mehr Informationen zurückzugeben werde ich einfach nicht schauer :/

Weiß zufällig wer wie ich ioctl debuggen kann oder es dazu bringe mir mehr infos zu geben?
Ich müsste wissen:
Wurde das Kommando überhaupt gesendet oder gab es vorher schon ein Problem?
Antwortet das Drive auf dieses Command mit einem Error?
Wenns die beiden nicht sind wo liegt der Fehler sonst ^^?

Ich wäre auch Vorschlägen wie man die Befehle anders Senden kann nicht abgeneigt (ich muss aber auch nicht Standart Kommandos senden können). Will ja alles mal gesehen haben

MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.02.2009, 14:18 Uhr
~keros
Gast


in die errno variable schreibt ers rein


Code:
#include <error.h>
...
printf(%d - %s\n", errno, strerror(errno));



MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: