PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code laeuft nur unter SuSE nicht unter Debian



mithras
27-06-2003, 22:55
Unten seht ihr eine Funktion namens mapping, was mapping macht weiß ich denk ich derjenige der mir vielleicht helfen koennte.

Das komische ich kann untensehenden Code auf einem SuSE Linux 8.0 (Kernel 2.4) Rechner ausführen (da funktioniert alles einwandfrei!), auf einem Debian woody (Kernel 2.2) Rechner aber nicht!

Da kommt folgende Fehlermeldung:

"Invalid Argument"
bzw.
"Segmentation fault"

Glaube nicht dass es am Unterschied Kernel 2.2 / 2.4 liegt.

Habe den Code jeweils auf beiden Systemen fehlerfrei kompeliert.





int *mapping1()
{

int fd_sm;

int *zeiger;

if ( (fd_sm=open("/dev/zero", O_RDWR)) < 0)
printf("kann /dev/zero nicht öffeln!\n");

if ( (zeiger = mmap(0, sizeof(zeiger), PROT_READ | PROT_WRITE, MAP_SHARED, fd_sm, 0)) ==(caddr_t)-1){
printf("mmap fehler!\n");
perror("Rueckmeldung1: \n");
}

close(fd_sm);

return zeiger;
}

anda_skoa
27-06-2003, 23:03
Hmm, ist es erlaubt, den fd zu schliessen, solange man mit dem gemappten File arbeitet?

Abgesehen davon, bist du dir sicher, dass du sizeof(zeiger) und nicht sizeof(int) meinst?
Willst du einen Zeigerwert lesen oder einen int?

Ciao,
_

mithras
27-06-2003, 23:14
hm hab mal close(fd) auskommentiert und auch dann noch extra mal int anstelle von Zeiger versucht, aber leider immer noch gleich meldung und nix funktioniert!

Bin am verzweifeln...wie kann sowas sein??
Bzw. was kann da sein?!

wraith
28-06-2003, 09:13
Das ist immer schwer,Code zu debuggen,der bei einem selber läuft.
O.k was ich gefunden habe bei einem ähnlichen Code.


Linux doesn't allow MAP_ANON + MAP_SHARED, nor does it support the
/dev/zero hack.

Mal probiert ein anderes File zu öffnen?

mithras
28-06-2003, 17:33
Hab den 2.4er Kernel draufgepackt, jetzt funktionierts ;)