Mooolto molto interessante!

Aggiungerei un suggerimento. Si potrebbero utilizzare dei puntatori a funzione, che ancora di più faciliterebbero la leggibilità. Ad esempio il tutto potrebbe essere implementato così:

codice:
typedef struct _FILE_STRUCT
{
	FILE* file;
	int ( *get_byte )( FILE* ); /* punterà a getc() */
	int ( *put_byte )( int, FILE* ); /* punterà a putc() */

} FILE_STRUCT;

...

typedef struct _STREAM
{
	union 
	{
		FILE_STRUCT file;
		SOCKET_STRUCT socket;
		STRING_STRUCT buffer;

	} values;

	enum { ST_STREAM_FILE, ST_STREAM_SOCKET, ST_STREAM_STRING } type;

} *STREAM;
E' solo un'idea, così come l'ho postato in realtà non aiuta molto.

GOOD PILLOLA! :gren: