louatiamin
Messages postés20Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention 5 avril 2005
-
31 août 2004 à 09:24
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
3 sept. 2004 à 17:26
g un e kestion ki necessite un peu de "profissionalisme" (en tt k mal redigé )
mai ma kestion est la suivante:
en parlant du C (langage) on dirai la portabilité du C (pas comme java portable a sa façon)
pour C il suffit de compiler sur la machine hote et ça marche sans aucun doute
c a dire il suffit de posseder un compilateur C et on aura pas de problème d'autre façon
si on possede un compilteur C pour macintosh et ke le code est ecrit sur PC en compilant sur PC ça marchera pour PC et en
Compilant pour mac ça marche pour mac néantmoin respectant une ecriture ANSI-C
la portabilité quand a elle pour pour JAVA est loin differente a ce sens pour C
la portabilité pour JAVA consiste au fait qu'on ne compile le code q'une seule foi et yaura ni edition de lien ni rien du tt
en ce fait le compiltaur JAVAC.exe genere un pseudo code (bytecode) ki est un standard pour java ce byte code sera interpreté
par le JRUNTime (java virtual machine) et executé sur n'importe kelle Systeme d'exploitattion et n'importe kelle plateforme
mai une contrainte d'avoir je java Virtual Machine
Donc nous y somme
je veut dire ceci est l'idé ki est en ma tete si il ya des erreur je veux boin une correction avant de continuer a presenter
mon bug
a ce stade je veu presenter mon probleme
personellement chui en train de developper mon personnel operating system
Pour JAVA y'aura pas de la place bien sur il ne vont pas ce contenter a me construire une machine virtuelle a un systme
d'exploitation ki ne sais rien faire par rapport a mac os // linux // windows....
alors on tourne pour le C evidement
bah en me basant sur kelke documentation ki sont avec l'editeur TC3.0 ke j'utilise pour developper mon Systeme
pour une premiere fois je me prned le dessu !!!
les fonction ne sont pas toute portable ??????
et je trouve ça tres evident
par exemple
une fonction de lecture du port dans conio.h ne pourra pas etre portable et en voyant sa
portabilité il se trouve alors ke cette fonction ne tourne vraiment ke sur DOS
Portability
DOS | Unix | Ansi C | C++ only
| yes | NO | NO | NO |
==================================
ki juska ici me choke et me mets tt dans l'eau surtout pour un debutant
une fois un jours je tombe sur un bon tutoriel assembleur et hoop j'arrive ici a faire n'importe koi sur mon PC
par exemple je construi ma propre fonction inP oui ma propre fonction en klk ligne
int inP(unsigned port)
{
int var;
_asm{
mov dx,port;
in ax,dx
mov var,ax
}
return var;
}
et hoop ça marche meme sur linux dos et mon systeme d'exploitation mai attention seulement sur PC
pk?? du fait ke c'est de l'assembleur et pour l'assembleur chaque type de machine a son propre asm
ici j'ai tout clair et net dans ma tete mais il ya une petite lakune ke je peut ignorer mai je veut pas ke ça me coutera tres
cher
mon prob est le suivant:::
arrivé a ce stade de connaise je commence a douter la portabilité du langage C
ehht oui et je le doute fortement
pour la fonction la non portabilité (pour macintosh et PC par exemple) est logique vu la
difference d'architecture pour les port
mai pour les fonctions de I/O des donné par exemple printf , scanf , fprintf , fscanf , fread , fwrite ... ne serait -il pas
le meme cas?????
sachant ke je trouve
Portability
DOS | Unix | Ansi C | C++ only
| yes | yes | yes | |
==================================
disons ke pour des architecture differente ça peut ne pas etre portable
mai pour une meme architecture on n'a pas raison de le dire
mais moi je le doute aussi
par exemple pour les fonction printf scanf on peu dire ke ça marcherai pour une meme architecture et pour differnt OS
mai pour les fonction de lecture de fichier
je le pense pas
et voici mon explication
les fonction de lecture et d'ecriture se base tout dabord sur un fopen et fclose en utilisant la structure FILE
typedef struct {
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer,*curp;
unsigned istemp;
short token;
}FILE;
//pour un fat
mais on sais bien ke la structure FILE varie d'un systeme de fichier a un autre
personnellement pour mon systeme jutilise celle ci pour fat12 afin d'eviter des probleme
typedef struct
{
char name[8];
char point;
char ext[3];
} filename;
typedef struct
{
char jmp[3];
char OSName[8];
short bytepersect;
char sectperclust;
short nb_reserved_sects;
char number_of_fats;
short nb_root_entries;
short nb_sects;
unsigned char media_type;
short sectperfat;
short sectpertrack;
short heads;
int nhidden;
int nsect;
char drive;
char reserved;
char extboot;
int volid;
char vol_name[11];
} fat12info;
typedef struct
{
char name[8];
char ext[3];
char attribute;
char reserved;
char ctime_ms;
short ctime;
short cdate;
short adate;
short starting_cluster_high;
short mtime;
short mdate;
short starting_cluster;
int filesize;
} fat12entry;
avec les fonction suivante te d'autre
int get_fat12_info(fat12info * fat12struct);
void print_fat12_infos(void);
void read_fat12_entry(fat12entry * entree, long n);
void print_fat12_entry(fat12entry entree);
ke sont ecrit en asm
voila est fini mai mon probleme est :
"je veux une explication ki me clarifie tout ca "
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 31 août 2004 à 10:39
j'ai pas été jusqu'a la fin mais j'en ai assez lu pour comprendre ton probleme, le C est portable, cxa ne fais aucun doute mais ce que tu n'as pas compris c'est que en depi de sa portabilité le C ne connais pas la machine (le principe d'unix, seul le noyau est dependant de la machine), donc aucune notion de clavier, d'ecran, de port, d'interruptions...
d'ailleur tu l'as surement remarquer en utilisant les i/o de la bibliotheque standard, on travail sur des flux, c'est une couche abstraite
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 31 août 2004 à 12:50
Tes codes ANSI/C seront portables lorsque tu auras recodé la stdlib pour ton système. Voir http://www.cplusplus.com/ref/ pour la liste des fonctions concernées, conio n'en fait PAS partie, c'est du DOS, à oublier.
Bon courage et fais un effort sur l'ortographe, je n'ai même pas eu le courage de lire jusqu'au bout...
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 1 sept. 2004 à 14:55
C est vrai que pour te lire c est assez complique...
Effectivement toutes les fonctions du C ANSI sont portables, mais le header conio.h est specifique a MS-DOS.
Ensuite le C est portable, du moins si tu restes en C ANSI et que tu ne fais pas de conneries comme coder :
int *mon_int = malloc(4);
au lieu de :
int *mon_int = malloc(sizeof(int));
Si tu fais un peu attention ton code passera sans problemes sur tous les systemes, UNIX, mais aussi windows et d autres encore (j ai porte quelques programme presque sans modifications sur TI-89 comme ca alors que l OS n a rien a voir et l architecture non plus!).
louatiamin
Messages postés20Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention 5 avril 2005 1 sept. 2004 à 15:41
bon personnellement le fait qui me dirige a dire que le C est non portable est la gestion des fichier et des disque dur
je vai faire un oeil sur http://www.cplusplus.com/ref/ merci
Vous n’avez pas trouvé la réponse que vous recherchez ?