struct stat fileStat;
size_t fileSize;
fd = open(filename, O_RDONLY);
fstat(fd, &fileStat);
fileSize = fileStat.st_size;
Godzil (./2440) :ouais bah à l'époque tu pouvais encore utiliser le bon vieux open (hérité du Basic) pour communiquer sur port série ^^
J'ai toujours connu l'objet COMM, depuis VB3.0
Zeph (./2436) :
justement c'est un bon indicateur, si tu fais des opérations sur des tailles tu ne devrais jamais sortir de l'espace des nombres non signés, sinon je suis d'accord que c'est bancal.
if (b > a)
{
a = a - b;
}
else
{
raiseWarning("a - b goes negative, caping at 0");
a = 0;
}
very (./2444) :Les nombres signés et non signés sont des représentants du même anneau ℤ/28×2ⁿℤ. Cet anneau n'est pas un corps parce que 28×2ⁿ n'est pas premier. Mais on s'en fout.
Sauf que, contrairement au nombres signés, c'est un espace qui pu un peu beaucoup, où la soustraction est très problématique, donc par exemple on ne peut pas résoudre systématiquement dans l'espace une équation de premier degré ( 5x+142=0), etc. Bref même pas un corps.
Du coup la sureté des opérations instables (soustraction) dépend non pas du type, mais de la valeur des variables : (a-b) appartient à |N ssi a>=b, ce qu'il est impossible de savoir à la compilation. Du coup :On fait évidemment la chose la mieux définie: on soustrait dans ℤ/28×2ⁿℤ. (D'ailleurs, les standards C et C++ ne définissent ça que pour les nombres non signés. Si ton addition ou soustraction signée déborde, le résultat est totalement indéfini et le compilateur peut même générer du code qui formate ton disque dur!)
-soit on accepte la soustraction, et on a un type qui suxe totalement, instable
-soit on refuse la soustraction.
-soit on accepte la soustraction en castant vers les entiers relatifs (au moins dans certains cas), c'est mathématiquement bien pus logique mais ça casse presque tout l'intérêt d'utiliser des nombres non signés.
-soit on fait une soustraction complétement dégueu (où a-b = 0 si a<= b ), et bonjour les emmerdes.
Exemple : ça doit se trouver mais on va commencer bateau. On dispose d'un espace de X Mo pour écrie un fichier, on veux savoir si il y assez de place... ( x - taille fichier ) > 0 ? Bha non tu peux pas le faire sans erreur. Bha ( x > taille fichier ) ? ça revient à faire la chose précédente mais on compte sur le compilo, processeur, etc, pour te sortir de la merde et hacker la difficulté.Bah non. x > taille fichier n'est pas la même chose que ( x - taille fichier ) > 0 dans ℤ/28×2ⁿℤ (avec la relation d'ordre induite par le représentant principal non signé de chaque classe d'équivalence). Et tout le monde écrit intuitivement la première version, qui est la bonne.
Si on veut rester cohérent et type-propre, il faudrait donc une fonction d'ordre spécifique, ça existe sur les entiers naturels, mais bon c'est relou à implémenter sans faire appel aux entiers relatifs.La fonction d'ordre est toute simple, et c'est évidemment comme ça que c'est implémenté: on prend le représentant principal non signé de chaque classe d'équivalence (donc 0 pour 0+28×2ⁿℤ, 1 pour 1+28×2ⁿℤ, …, 28×2ⁿ-1 pour 28×2ⁿ-1+28×2ⁿℤ) et on range par conséquent: 0 < 1 < 2 < … < 28×2ⁿ-1, donc 0+28×2ⁿℤ < 1+28×2ⁿℤ < 2+28×2ⁿℤ < … < 28×2ⁿ-1+28×2ⁿℤ.
Je ne parle pas du jour où, muni de la soustraction dégueu, tu veux faire (a-b)+c et que tu te rends compte que (a-b)+c != c+a-b, que tu casses ton ordi et changes de métier.Heureusement, personne n'implémente ta "soustraction dégueu" (qui s'appelle en réalité "soustraction saturante") comme soustraction par défaut, ce serait idiot. La vraie soustraction dans ℤ/28×2ⁿℤ satisfait (a-b)+c=c+a-b.
Godzil (./2443) :après c'est ptet limités aux OS non NT (donc jusqu'à win98)
Tu m'apprends un truc
Je testerais ce soir tien
Godzil (./2438) :Ouais, c'est un peu le problème (du coup, pour l'instant, on fait avec cette vieille machine).
VB.net et VB "classique" n'ont en commun que VB.. Porter vers .Net == réécriture complete ou presque :/
squalyl (./2441) :Pourquoi, les API pour le // ne sont pas simples à gérer ? Il faut démultiplexer à la main ?
dieu merci c'est du série pas du parallèle...
Nil (./2451) :Avant NT, tu pouvais accéder directement au port // en mode buffer. (c'est comme ça que ti-drive marchait) Après NT, faut un driver "propre" et la version "officielle" du driver LPT est prévue pour traiter une imprimante avec les signaux dédiés du port //, pas pour envoyer du RAW sur les fils...
Merci pour vos retoursGodzil (./2438) :Ouais, c'est un peu le problème (du coup, pour l'instant, on fait avec cette vieille machine).
VB.net et VB "classique" n'ont en commun que VB.. Porter vers .Net == réécriture complete ou presque :/squalyl (./2441) :Pourquoi, les API pour le // ne sont pas simples à gérer ? Il faut démultiplexer à la main ?
dieu merci c'est du série pas du parallèle...