Newsgroup: it.comp.lang.c
Titolo: posix, iso e fd

Dall'ultimo thread mi sono venuti alcuni dubbi, se me li potete chiarire 
mi fate un favore. Qui sotto provo a spiegare anche quello che ho 
capito, ditemi se e' giusto.
Esattamente qual'e' il rapporto tra posix e ansi/iso 9899? E questi file 
descriptor a quale livello si trovano?
La spiegazione che mi sono dato:
- C'e' lo standard ansi/iso che specifica il C nella sua forma piu' 
astratta e portabile,
- e dentro a queste specifiche c'e' la definizione di varie funzioni di 
i/o su stream
- e c'e' scritto che queste operano su puntatori a strutture di tipo 
FILE. Punto.
- Quello che c'e' dentro a queste strutture e' lasciato a chi crea un 
compilatore e le relative librerie+file di intestazione.
- A questo punto siamo gia' vicini al sistema operativo, e quindi 
probabilmente un membro e' un numero (o altro) che serve al SO stesso 
per identificare il file aperto.
- Le funzioni di i/o su stream e la struttura file, essendo 
implementation-defined possono contenere qualunque cosa, ma se 
l'implementazione si basa su POSIX o lo supporta, allora il numero e' un 
file descriptor e le funzioni si basano su read() write() e compagnia.
- Se il sistema operativo stesso segue POSIX, per esempio unix, queste 
funzioni fanno parte del kernel e i file descriptor sono proprio quelli 
mappati nella task_struct (o in una sotto-struct, non ricordo)
- Se il sistema operativo non segue POSIX, allora e' la libreria C che 
si deve occupare di fare la traduzione fd->handle_del_so e vice versa e 
di fare in modo che write() read() ecc.. si comportino in modo conforme 
a POSIX. Un po come sembra succedere in windows.
Spero che sia tutto giusto o quasi...
Domandina extra: Ma POSIX oltre a un soprainsieme del C ANSI e alla 
struttura di un SO portabile cosa descrive?
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

Giovanni ha scritto:

Se ho capito bene, POSIX dice questo: (faccio l'esempio con l'i\o)
+---POSIX--------------+
|                      |
|       +-c ansi/iso-+ |
|       |            | |
|       |i/o generico| |
|       |     /\     | |
|       +-----||-----+ |
|             \/       |
|   i/o standardizzato |
|     /\   /\    /\    |
+-----||---||----||----+
       \/   \/    \/
    [api di i/o del SO]


On 10/12/05 14:52, DevarajA wrote:
Io la cambierei cosi`:
-  il C usa le librerie.
-  alcune funzioni seguono le specifiche ISO/ANSI
-  alcune funzioni seguono le specifiche POSIX
-  se il SO ha interfacce POSIX l'ultima scatoletta e` trasparente
-  se il SO ha api proprietarie l'ultima scatoletta fa le trasformazioni
  +----Librerie----------+
  |  /\          /\      |
  |  ||          \/      |
  |  ||   +-c ansi/iso-+ |
  |  ||   |            | |
  |  ||   |i/o generico| |
  |  ||   |     /\     | |
  |  ||   +-----||-----+ |
  |  \/         \/       |
  +---POSIX--------------+
  |                      |
  |   i/o standardizzato |
  |     /\   /\    /\    |
  +-----||---||----||----+
        \/   \/    \/
     [api di i/o del SO]
Ciao


 Giovanni
Ok grazie per le spiegazioni.


 struttura di un SO portabile cosa descrive?
Lo standard POSIX, per quanto mi risulta, definisce anche altre cose oltre
alle funzioni del C.
La prima che mi viene in mente sono i parametri di una shell (correggetemi
se dico una bestialita'): in una shell POSIX (come Bash o Sh), il
"formato" che i parametri devono avere deve seguire una sorta di regola.
Es:
	mioprog -h		(<--- parametro in versione corta)
	mioprog --help		(<--- parametro in versione lunga)
	mioprog -f PIPPO	(<--- parametro in versione corta)
	mioprog --file=PIPPO	(<--- parametro in versione lunga)
Inoltre, anche gli shell scripts devono seguire uno standard.
Per interderci, mentre Bash o Sh sono POSIX compliant, Tcsh o Ksh non lo
sono (e quindi c'e' da smadonnare un po' ogni tanto).
-- 
      ______________
(*)--[::::::::::::::]--(*)
(*)--[>::d1s4st3r::<]--(*)
(*)--[::::::::::::::]--(*)
(*)--[::wonder'ing::]--(*)
(*)--[::what's::::::]--(*)
(*)--[::^happening::]--(*)
(*)--[::|^::::::::::]--(*)
(*)--[__||__________]--(*)
 |......................|
http://xoomer.virgilio.it/
 +------> mental_insomnia/
(*) <-------------------+

 "formato" che i parametri devono avere deve seguire una sorta di regola.
POSIX = Portable Operating System Interface Standard.
Quindi anche le interfacce della shell
