opendir syscall nummer

Post Reply
Message
Author
snake

opendir syscall nummer

#1 Post by snake »

hallo

Bin mich gerade in asm einarbeiten(gas-syntax). Hatte vor ein programm zu schreiben, das den verzeichnissinhalt auflistet. Doch unter asm/unistd.h konnte ich kein syscall eintrag für opendir finden.
Was muss ich da nutzen ?

danke

bye

Sascha

Re: opendir syscall nummer

#2 Post by Sascha »

Die ls - Implementierung der asmutils benutzt folgenden Syscall:
 
getdents (141) 
get directory entries
 
arg:
eax - 141,
ebx - uint fd
ecx - struct dirent *dirp
edx - uint count
 
return:
eax - no. of bytes read
 
errors: 
badf, fault, inval, noent, notdir

ref unistd.h, linux/dirent.h, linux/unistd.h

NOTE: False description of structure <dirent> in man 2 de getdents:
2nd item, "d_off", is offset from beginning of directory file to concerning entry.

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: opendir syscall nummer

#3 Post by bakunin »

Hallo snake!

Nur zur Information: Dass du keinen Syscall-Eintrag dafür gefunden hast, liegt daran, dass es sich nicht um einen Systemruf handelt, sondern um eine Funktion der C-Bibliothek. Das sieht man aber auch, wenn man die Manpage davon aufruft. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Cheers,
GNU/Wolfgang

snake

Re: opendir syscall nummer

#4 Post by snake »

danke für die antworten

Doch weiss jemand wie das in der c-bibliothek realisiert worden ist ?
Wie kann ich ein Verzeichniss auslesen mit syscalls ?
(ein verzeichniss ist ja auch nur eine datei, mit den dateinamen und inode-nummern der dateien im verzeichniss, kann es sein das ich mit open öffnen muss und dann mit readdir(ist glaube ich ein syscall) lesen kann ???)

danke

bye

ps:
@sascha: hättest du mir da den link zu den asmutils, hört sich interessant an ;)

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: opendir syscall nummer

#5 Post by bakunin »

Hi snake!

> Doch weiss jemand wie das in der c-bibliothek realisiert worden ist ?

Schau doch einfach nach.

> Wie kann ich ein Verzeichniss auslesen mit syscalls ?

Mit getdents(), das hat Sascha bereits gesagt.

> (ein verzeichniss ist ja auch nur eine datei, mit den dateinamen und inode-nummern der dateien im verzeichniss, kann es sein das ich mit open öffnen muss

Nein, in Unix-Systemen (und Unix-Klonen) kannst du ein Verzeichnis nicht mit open() öffnen, denn Unix unterscheidet im Gegensatz zu GNU/Hurd sehr wohl zwischen Verzeichnissen und Dateien.

> und dann mit readdir(ist glaube ich ein syscall) lesen kann ???)

Seufz. Nein, auch das ist _kein_ Systemruf und auch in diesem Fall kann man das an der Manpage sehen.

Cheers,
GNU/Wolfgang

snake

Re: opendir syscall nummer

#6 Post by snake »

hallo gnu/wolfgang
(kann ich eine kopie von dir haben ;)

>Schau doch einfach nach.

Stimmt ! Bin in solchen sachen halt eher ein newbie und in den code von grossen projekten zu schauen ist für mich halt neu. (ich weiss, so lernt man am besten, muss halt das risiko mich im code-dschungel zu verlieren eingehen ;)

>Mit getdents(), das hat Sascha bereits gesagt.

Ich dachte da bräuchte es etwas mehr, erst halt öffnen und dann auslesen.

>Seufz. Nein, auch das ist _kein_ Systemruf und auch in diesem Fall kann man das an der Manpage sehen.

Ok die manpage sagt es sei kein syscall, doch trotzdem existiert ein eintrag in der asm/unistd.h (89) !?!

danke

bye

ps: ich muss mir wircklich angewöhnen, die manpages öfter zu konsultieren, danke ;)

Post Reply