Newsgroup: it.comp.os.linux.sys
Titolo: cosa sono le syscall

Salve a tutti.
Avendo piu' volte sentito parlare delle syscall, ma non avendo compreso bene
cosa realmente sono, so solo che sono delle chiamate di sistema, ma che vuol
dire.
Interessandomi di programmazione in c, chiedo a qualcuno di voi  se potete
farmi qualche esempio di syscall, in quanto le vedo come un concetto un po'
astratto, oppure reindirizzandomi su qualche sito dove le trattano.
Se il sito e' in italiano sarebbe anche meglio, lo so che chiedo troppo e
che devo imparare l'inglese, infatti sto' cercando un maestro.
Caio
 Un saluto a tutti i linuxiani.

in parole povere sono il mezzo con cui le applicazioni comunicano con il 
kernel e con i livelli sottostanti (come l'hardware). il programma pippo 
deve aprire il file pluto? tutto quello che deve fare č, in questo caso, 
passare una open al kernel con quello che deve essere aperto, e il 
kernel gli "passa" il contenuto del file. forse č una spiegazione troppo 
semplicistica, ma funziona piů o meno cosě. puoi anche provare ad 
utilizzare strace (man strace!) con un comando qualsiasi per vedere 
sullo schermo quali sono le system call che vengono chiamate. buon 
divertimento


Sono delle chiamate a funzioni molto elementari realizzate in C o Assembler
: funzioni del tipo apri file , ecc...
Fanno parte delle funzioni del Kernel Space , x comprendere questo concetto
devi considerare che molte operazioni
che tu usi comunemente nella programmazione C non possono essere usate , ad
esempio la printf .
In poche parole si parla di un livello di programmazione molto basso ,
tuttavia molto molto potente, esiste un "pazzo" (non ricordo il nome )che
con le sole System Call riesce a far fare di tutto al PC ! ! !
Spero di essere stato chiaro , anche se mi sembra difficile
 Ciao
 Flex

kernel gli "passa" il contenuto del file.
In questo caso il prgramma pippo chiama una syscall?
da quello che ho capito mi sembra che e' cosi'.
Ciao


Esattamente. Per la precisione chiama una
open("pluto",flags)
Per la lista delle syscall guarda nei sorgenti del kernel
/usr/src/linux/include/asm-i386/unistd.h
(o qualcosa di simile)
e poi nelle man page (man 2 open).
Chiudo qui perche' il discorso e' palesemente OT
(esiste i.c.o.l.development per questi discorsi)
-- 
gen. Trimack
"Contrary to popular belief, Unix is user friendly. It just happens to
be very selective about who its friends are."

 ha scritto nel messaggio
news:Dn7ba.733$7y3....@twister1.libero.it...

Esatto , cmq tramite un bel trace dato su semplici comandi Unix tipo whoami
o ps puoi vedere facilmente le loro chiamate alle systemcall.
P.S. Esiste anche un file , non ricordo nome e percorso ,ma lo trovi
facilmente , che contiene una lista di tutte le system call del tuo sistema.
 --
 Ciao
 Flex

 astratto, oppure reindirizzandomi su qualche sito dove le trattano.
le chiamate a sistema sono le funzioni che il sistema operativo mette a
disposizione dei programmi.
Attenzione: sistema operativo, non librerie. Il che vuol dire che non devi
considerare chiamate a sistema le funzioni delle varie librerie come per
esempio quelle della la libreria C. Il loro numero è ridotto, ma sono 
sufficienti per costruire con esse tutte le funzioni più evolute.
Quando tu chiami una syscall hai una commutazione della modalità di
esecuzione (e non di contesto), il processore cambia modalità di
operazione, il processo che l'ha chiamato si sospende e il kernel fa
l'operazione. Quando questa finisce il processo chiamante, se è ancora in
esecuzione riprende a girare.
Quando chiami per esempio fopen("/dev/ttyS0", "w"); cosa succede?
Per prima cosa la libreria C chiama la chiamata a sistema fopen (come già
ti hanno detto) e questo gira in modalità kernel, poi torna in modalità
utente e la libreria C chiama una fdopen sul filedescriptor e associa uno
stream ad esso.
Quando poi ci scrivi con fprintf() viene chiamata la funzione di sistema
write()  (man 2 write) che fa in modo che il kernel copi i dati che gli
passi in un suo buffer temporaneo. Poi è il kernel che si occupa di
svuotare il buffer, di mettere i dati nella seriale e di fare ritornare
la write. Quindi come vedi tui non vai mai a scrivere sulla seriale, 
ma chiedi al sistema operativo che lo faccia per te (mica siamo in 
windows dove puoi fare di quelle porcate...)
A cosa serve tutto questo? Beh, per garantire una certa integrità del
sistema. Se tutti potessero mettere le mani ovunque sarebbe la fine.
Perché dovresti usare fprintf e non write? Semplice, perché non è detto
che tutto quello che vuoi scrivere venga scritto al primo colpo. Le
funzioni della libreria C fanno tutti i controlli necessari per poterti
assicurare che l'operazione sia stata fatta correttamente senza che tu te
ne debba preoccupare.
Vuoi investire qualche spiccio e comprarti un buon libro?
The design of the unix operating system, Maurice Bach