Portabilité du C hoop c BIDON

louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 5 avril 2005 - 31 août 2004 à 09:24
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 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 "
A voir également:

8 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
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
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
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...
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 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!).
0
louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Derniè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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 5 avril 2005
1 sept. 2004 à 16:13
pas assez convaicu

regarde moi ça pensons que tout mon systeme d'exploiattion est entierement en C avec un bout asm

et que le systeme de fichier n'est ni un FAT ni NTFS ni EXT2..
alors comment donner une chaine de caractere a fopen (char*,char*)?????
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
1 sept. 2004 à 19:01
c'est quoi le probleme precisement ?

un fopen (char*,char*) serait incoherent sur ton systeme ???
0
louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 5 avril 2005
3 sept. 2004 à 12:12
personne ne me comprend alors CIO
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
3 sept. 2004 à 17:26
tout ce qu'il faut comprendre c'est que le c standard (ansi/iso Cxx) est portable
0
Rejoignez-nous