Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les constantes
Les structures de données
Les fonctions de base
Les fonctions avancées
Les fonctions utilitaires
Les fonctions d'accès aux fichiers gzip
Les fonctions de somme de contrôle
Les fonctions non documentées
Les premiers pas
Préface
Notes légales
Dictionnaire
Recherche

Les structures de données

Voici la structures de données de flux de zlib :

  1. typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size);
  2. typedef void   (*free_func)(voidpf opaque, voidpf address);
  3.  
  4. struct internal_state;
  5.  
  6. typedef struct z_stream_s {
  7.     z_const Bytef *next_in;           /* octet d'entrée suivant */
  8.     uInt     avail_in;                /* nombre d'octets disponibles à next_in */
  9.     uLong    total_in;                /* nombre total d'octets d'entrée lus jusqu'à présent */
  10.  
  11.     Bytef    *next_out;               /* le prochain octet de sortie ira ici */
  12.     uInt     avail_out;               /* espace libre restant à next_out */
  13.     uLong    total_out;               /* nombre total d'octets générés jusqu'à présent */
  14.  
  15.     z_const char *msg;                /* dernier message d'erreur, NULL si aucune erreur */
  16.     struct internal_state FAR *state; /* non visible par les applications */
  17.  
  18.     alloc_func zalloc;                /* utilisé pour allouer l'état interne */
  19.     free_func  zfree;                 /* utilisé pour libérer l'état interne */
  20.     voidpf     opaque;                /* objet de données privé transmis à zalloc et zfree */
  21.  
  22.     int     data_type;                /* meilleure estimation du type de données : binaire ou texte pour deflate, ou l'état de décodage pour inflate */
  23.     uLong   adler;                    /* Valeur Adler-32 ou CRC-32 des données non compressées */
  24.     uLong   reserved;                 /* réservé pour une utilisation future */
  25. } z_stream;
  26.  
  27. typedef z_stream FAR *z_streamp;

Voici les informations d'entête gzip transmises vers et depuis les routines zlib. Voir RFC 1952 pour plus de détails sur la signification de ces champs :

  1. typedef struct gz_header_s {
  2.     int     text;       /* Vrai si les données compressées sont censées être du texte */
  3.     uLong   time;       /* Heure de modification */
  4.     int     xflags;     /* Drapeaux supplémentaires (non utilisés lors de l'écriture d'un fichier gzip) */
  5.     int     os;         /* Système d'exploitation */
  6.     Bytef   *extra;     /* Pointeur vers un champ supplémentaire ou Z_NULL si aucun */
  7.     uInt    extra_len;  /* Longueur de champ supplémentaire (valide si supplémentaire != Z_NULL) */
  8.     uInt    extra_max;  /* Espace supplémentaire (uniquement lors de la lecture de l'entête) */
  9.     Bytef   *name;      /* Pointeur vers un nom de fichier terminé par zéro ou Z_NULL */
  10.     uInt    name_max;   /* Espace au nom (uniquement lors de la lecture de l'entête) */
  11.     Bytef   *comment;   /* Pointeur vers un commentaire terminé par zéro ou Z_NULL */
  12.     uInt    comm_max;   /* Espace dans le commentaire (uniquement lors de la lecture de l'entête) */
  13.     int     hcrc;       /* Vrai s'il y avait ou il y aura un entête CRC */
  14.     int     done;       /* Vrai lorsque la lecture de l'entête gzip est terminée (non utilisé lors de l'écriture d'un fichier gzip) */
  15. } gz_header;
  16.  
  17. typedef gz_header FAR *gz_headerp;

Utilisation des structures

L'application doit mettre à jour next_in et avail_in lorsque avail_in est tombé à zéro. Elle doit mettre à jour next_out et avail_out lorsque avail_out est tombé à zéro. L'application doit initialiser zalloc, zfree et opaque avant d'appeler la fonction init. Tous les autres champs sont définis par la bibliothèque de compression et ne doivent pas être mis à jour par l'application.

La valeur opaque fournie par l'application sera passée comme premier paramètre pour les appels de zalloc et zfree. Cela peut être utile pour la gestion personnalisée de la mémoire. La bibliothèque de compression n'attache aucune signification à la valeur opaque.

zalloc doit renvoyer Z_NULL s'il n'y a pas assez de mémoire pour l'objet. Si zlib est utilisé dans une application multi-processus léger, zalloc et zfree doivent être thread-safe. Dans ce cas, zlib est thread-safe. Lorsque zalloc et zfree sont Z_NULL à l'entrée de la fonction d'initialisation, ils sont définis sur des routines internes utilisant les fonctions de bibliothèque standard malloc() et free().

Sur les systèmes 16 bits, les fonctions zalloc et zfree doivent pouvoir allouer exactement 65536 octets, mais ne seront pas obligées d'en allouer plus si le symbole MAXSEG_64K est défini (voir zconf.h).

Avertissement : Sur MS-DOS, les pointeurs renvoyés par zalloc pour des objets d'exactement 655 36 octets doivent avoir leur décalage normalisé à zéro. La fonction d'allocation par défaut fournie par cette bibliothèque garantit cela (voir zutil.c). Pour réduire les besoins en mémoire et éviter toute allocation d'objets de 64 Ko, au détriment du taux de compression, compilez la bibliothèque avec -DMAX_WBITS=14 (voir zconf.h).

Les champs total_in et total_out peuvent être utilisés pour les statistiques ou les rapports de progression. Après compression, total_in contient la taille totale des données non compressées et peut être enregistré pour être utilisé par le décompresseur (en particulier si le décompresseur souhaite tout décompresser en une seule étape).



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Vendredi, le 17 janvier 2025