je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
int main ( void ) {
FILE *fp;
char *buffer;
char *data;
size_t file_size;
fp = fopen("fichier.jpg", "rb");
if ( fp == NULL ) {
// fichier non trouvé
return 0;
}
buffer = (char *)malloc(BIN_BUFFER_SZ);
while(!feof(fp)) {
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
}
fclose(fp);
// allocation de la taille exacte des données lues
data = (char *) malloc(file_size);
memcpy(data,buffer,file_size);
/// .... suite du traitement sur data
return 1;
}
je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
int main ( void ) {
FILE *fp;
char *buffer;
char *data;
size_t file_size;
fp = fopen("fichier.jpg", "rb");
if ( fp == NULL ) {
// fichier non trouvé
return 0;
}
buffer = (char *)malloc(BIN_BUFFER_SZ);
while(!feof(fp)) {
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
}
fclose(fp);
// allocation de la taille exacte des données lues
data = (char *) malloc(file_size);
memcpy(data,buffer,file_size);
/// .... suite du traitement sur data
return 1;
}
je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
int main ( void ) {
FILE *fp;
char *buffer;
char *data;
size_t file_size;
fp = fopen("fichier.jpg", "rb");
if ( fp == NULL ) {
// fichier non trouvé
return 0;
}
buffer = (char *)malloc(BIN_BUFFER_SZ);
while(!feof(fp)) {
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
}
fclose(fp);
// allocation de la taille exacte des données lues
data = (char *) malloc(file_size);
memcpy(data,buffer,file_size);
/// .... suite du traitement sur data
return 1;
}
In 'fr.comp.lang.c', mat wrote:je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
In 'fr.comp.lang.c', mat <nobody@thehouesacge.com> wrote:
je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
In 'fr.comp.lang.c', mat wrote:je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus.
j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
}
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
}
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
}
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
In 'fr.comp.lang.c', mat wrote:j'ai donc écrit le programme suivant :
<snip>
Je ferais comme ça:
In 'fr.comp.lang.c', mat <nobody@thehouesacge.com> wrote:
j'ai donc écrit le programme suivant :
<snip>
Je ferais comme ça:
In 'fr.comp.lang.c', mat wrote:j'ai donc écrit le programme suivant :
<snip>
Je ferais comme ça:
pour résoudre le problème de la taille du buffer, j'ai écrit le prog
suivant qui récupére la taille du fichier pour allouer la taille
correcte du buffer. J'économise ensuite la création du deuxiéme pointeur
dans lequel je recopiais les données du premier.
est-ce que la méthode que j'utilise est la meilleure façon de récupérer
la taille du fichier?
pour info je suis sous GNU/Linux (2.4.18) et j'utilise gcc version
2.95.4. le résultat de "SIZE MAX = %lu ", (unsigned long)((size_t) -1)
était SIZE MAX = 4294967295
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
{
size_t size = 0;
if ( fseek(fp, 0, SEEK_END) < 0 )
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
return size;
}
int main (void)
{
int ret = EXIT_SUCCESS;
FILE *fp = fopen ("test.jpg", "rb");
if (fp != NULL)
{
size_t st_size = _get_file_size(fp);
// rewind file to beginning
if ( fseek(fp, 0, SEEK_SET) < 0 )
{
fprintf(stdout, "fseek failed, unable to rewind : %sn",
strerror(errno));
ret = EXIT_FAILURE;
}
else
{
char *p_buffer = malloc (st_size);
#if DBG
printf ("size = %lun", (unsigned long) st_size);
#endif
if (p_buffer != NULL)
{
size_t file_size = fread (p_buffer, 1, st_size, fp);
if (file_size < 1)
{
fprintf (stdout, "no data was read.n");
if (ferror (fp))
{
fprintf (stdout, "file error : %sn", strerror (errno));
ret = EXIT_FAILURE;
}
}
else if ( file_size != st_size )
{
fprintf(stdout, "read bytes from read differs from stat.s_tsize
!n"); ret = EXIT_FAILURE;
}
else
{
fprintf (stdout, "read : %lun", (unsigned long)
file_size);
}
fclose (fp);
/* traitement sur p_buffer */
free (p_buffer);
}
else
{ fprintf (stdout, "error malloc p_buffern");
ret = EXIT_FAILURE;
}
}
}
else
{
fprintf (stdout, "no file foundn");
ret = EXIT_FAILURE;
}
return ret;
}
pour résoudre le problème de la taille du buffer, j'ai écrit le prog
suivant qui récupére la taille du fichier pour allouer la taille
correcte du buffer. J'économise ensuite la création du deuxiéme pointeur
dans lequel je recopiais les données du premier.
est-ce que la méthode que j'utilise est la meilleure façon de récupérer
la taille du fichier?
pour info je suis sous GNU/Linux (2.4.18) et j'utilise gcc version
2.95.4. le résultat de "SIZE MAX = %lu ", (unsigned long)((size_t) -1)
était SIZE MAX = 4294967295
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
{
size_t size = 0;
if ( fseek(fp, 0, SEEK_END) < 0 )
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
return size;
}
int main (void)
{
int ret = EXIT_SUCCESS;
FILE *fp = fopen ("test.jpg", "rb");
if (fp != NULL)
{
size_t st_size = _get_file_size(fp);
// rewind file to beginning
if ( fseek(fp, 0, SEEK_SET) < 0 )
{
fprintf(stdout, "fseek failed, unable to rewind : %sn",
strerror(errno));
ret = EXIT_FAILURE;
}
else
{
char *p_buffer = malloc (st_size);
#if DBG
printf ("size = %lun", (unsigned long) st_size);
#endif
if (p_buffer != NULL)
{
size_t file_size = fread (p_buffer, 1, st_size, fp);
if (file_size < 1)
{
fprintf (stdout, "no data was read.n");
if (ferror (fp))
{
fprintf (stdout, "file error : %sn", strerror (errno));
ret = EXIT_FAILURE;
}
}
else if ( file_size != st_size )
{
fprintf(stdout, "read bytes from read differs from stat.s_tsize
!n"); ret = EXIT_FAILURE;
}
else
{
fprintf (stdout, "read : %lun", (unsigned long)
file_size);
}
fclose (fp);
/* traitement sur p_buffer */
free (p_buffer);
}
else
{ fprintf (stdout, "error malloc p_buffern");
ret = EXIT_FAILURE;
}
}
}
else
{
fprintf (stdout, "no file foundn");
ret = EXIT_FAILURE;
}
return ret;
}
pour résoudre le problème de la taille du buffer, j'ai écrit le prog
suivant qui récupére la taille du fichier pour allouer la taille
correcte du buffer. J'économise ensuite la création du deuxiéme pointeur
dans lequel je recopiais les données du premier.
est-ce que la méthode que j'utilise est la meilleure façon de récupérer
la taille du fichier?
pour info je suis sous GNU/Linux (2.4.18) et j'utilise gcc version
2.95.4. le résultat de "SIZE MAX = %lu ", (unsigned long)((size_t) -1)
était SIZE MAX = 4294967295
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
{
size_t size = 0;
if ( fseek(fp, 0, SEEK_END) < 0 )
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
return size;
}
int main (void)
{
int ret = EXIT_SUCCESS;
FILE *fp = fopen ("test.jpg", "rb");
if (fp != NULL)
{
size_t st_size = _get_file_size(fp);
// rewind file to beginning
if ( fseek(fp, 0, SEEK_SET) < 0 )
{
fprintf(stdout, "fseek failed, unable to rewind : %sn",
strerror(errno));
ret = EXIT_FAILURE;
}
else
{
char *p_buffer = malloc (st_size);
#if DBG
printf ("size = %lun", (unsigned long) st_size);
#endif
if (p_buffer != NULL)
{
size_t file_size = fread (p_buffer, 1, st_size, fp);
if (file_size < 1)
{
fprintf (stdout, "no data was read.n");
if (ferror (fp))
{
fprintf (stdout, "file error : %sn", strerror (errno));
ret = EXIT_FAILURE;
}
}
else if ( file_size != st_size )
{
fprintf(stdout, "read bytes from read differs from stat.s_tsize
!n"); ret = EXIT_FAILURE;
}
else
{
fprintf (stdout, "read : %lun", (unsigned long)
file_size);
}
fclose (fp);
/* traitement sur p_buffer */
free (p_buffer);
}
else
{ fprintf (stdout, "error malloc p_buffern");
ret = EXIT_FAILURE;
}
}
}
else
{
fprintf (stdout, "no file foundn");
ret = EXIT_FAILURE;
}
return ret;
}
Emmanuel Delahaye wrote:In 'fr.comp.lang.c', mat wrote:je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus. j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
ok merci Emmanuel,
j'ai réécrit mon programme que voici :
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
dernier problème, je ne récupere pas toutes les données dans la variable
buffer. sizeof(buffer) me renvoi 4, ne devrait-il pas me renvoyer
file_size ?
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', mat <nobody@thehouesacge.com> wrote:
je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus. j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
ok merci Emmanuel,
j'ai réécrit mon programme que voici :
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
dernier problème, je ne récupere pas toutes les données dans la variable
buffer. sizeof(buffer) me renvoi 4, ne devrait-il pas me renvoyer
file_size ?
Emmanuel Delahaye wrote:In 'fr.comp.lang.c', mat wrote:je voudrais lire un fichier binaire (un fichier jpg par exemple) et
enregistrer son contenu en mémoire pour ensuite faire un traitement
dessus. j'ai donc écrit le programme suivant :
#define BIN_BUFFER_SZ 8291*20 // définit la taille maximale de mon
buffer
ok merci Emmanuel,
j'ai réécrit mon programme que voici :
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#define BIN_BUFFER_SZ (8291*20)
int main ( void )
{
FILE *fp = NULL;
char *buffer = NULL;
char *data = NULL;
size_t file_size = 0;
fp = fopen("test.jpg", "rb");
if ( fp == NULL ) {
fprintf(stdout, "fichier non trouvén");
return EXIT_FAILURE;
}
buffer = malloc(BIN_BUFFER_SZ);
if ( buffer == NULL ) {
fprintf(stdout, "erreur malloc buffern");
return EXIT_FAILURE;
}
file_size = fread(buffer,1,BIN_BUFFER_SZ,fp);
if ( !file_size )
fprintf(stdout, "no data was read.n");
fprintf(stdout, "reading : %dn", file_size);
fprintf(stdout, "Buffer : %sn", buffer);
fprintf(stdout, "Size Buffer : %dn", sizeof(buffer));
if (ferror(fp)) {
fprintf(stdout, "erreur fichier : %sn", strerror(errno));
return EXIT_FAILURE;
}
fclose(fp);
fprintf(stdout, "file size : %dn", file_size);
data = malloc(file_size);
if ( data == NULL ) {
fprintf(stdout, "erreur malloc datan");
return EXIT_FAILURE;
}
memcpy(data,buffer,file_size);
fprintf(stdout, "Data : %sn", data);
return EXIT_SUCCESS;
}
dernier problème, je ne récupere pas toutes les données dans la variable
buffer. sizeof(buffer) me renvoi 4, ne devrait-il pas me renvoyer
file_size ?
Non. buffer est un pointeur sur un bloc mémoire. L'opérateur sizeof
retourne la taille de la variable (donc ici la taille d'un pointeur sur
char pour ta plateforme), pas la taille du bloc mémoire sur lequel
pointe un pointeur. Pour t'en assurer, il te suffit de faire ça :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ptr = NULL;
fprintf(stdout, "before malloc, size of ptr is %dn", sizeof (ptr));
ptr = malloc(20);
if (!ptr) {
fprintf(stderr, "malloc failedn");
return EXIT_FAILURE;
}
fprintf(stdout, "after malloc, size of ptr is %dn", sizeof (ptr));
strcpy(ptr, "allo brest");
fprintf(stdout, "after strcpy, size of ptr is %dn", sizeof (ptr));
free(ptr);
ptr = NULL;
return EXIT_SUCCESS;
}
Bruno
Non. buffer est un pointeur sur un bloc mémoire. L'opérateur sizeof
retourne la taille de la variable (donc ici la taille d'un pointeur sur
char pour ta plateforme), pas la taille du bloc mémoire sur lequel
pointe un pointeur. Pour t'en assurer, il te suffit de faire ça :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ptr = NULL;
fprintf(stdout, "before malloc, size of ptr is %dn", sizeof (ptr));
ptr = malloc(20);
if (!ptr) {
fprintf(stderr, "malloc failedn");
return EXIT_FAILURE;
}
fprintf(stdout, "after malloc, size of ptr is %dn", sizeof (ptr));
strcpy(ptr, "allo brest");
fprintf(stdout, "after strcpy, size of ptr is %dn", sizeof (ptr));
free(ptr);
ptr = NULL;
return EXIT_SUCCESS;
}
Bruno
Non. buffer est un pointeur sur un bloc mémoire. L'opérateur sizeof
retourne la taille de la variable (donc ici la taille d'un pointeur sur
char pour ta plateforme), pas la taille du bloc mémoire sur lequel
pointe un pointeur. Pour t'en assurer, il te suffit de faire ça :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ptr = NULL;
fprintf(stdout, "before malloc, size of ptr is %dn", sizeof (ptr));
ptr = malloc(20);
if (!ptr) {
fprintf(stderr, "malloc failedn");
return EXIT_FAILURE;
}
fprintf(stdout, "after malloc, size of ptr is %dn", sizeof (ptr));
strcpy(ptr, "allo brest");
fprintf(stdout, "after strcpy, size of ptr is %dn", sizeof (ptr));
free(ptr);
ptr = NULL;
return EXIT_SUCCESS;
}
Bruno
In 'fr.comp.lang.c', mat wrote:#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
Huh! Dans quel bouquin as-tu appris ce vieux style? Depuis 1989, on écrit:
size_t _get_file_size (FILE *fp)
Le prefix '_' est acceptable car il est suivit d'une minuscule, mais il
apporte plutôt de la confusion qu'autre chose.
size_t get_file_size (FILE *fp)
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
Attention, le type retourné par ftell() est 'long'. Or un long ne tient pas
forcément dans un size_t (Chez moi, en 16-bit, ça couine).
Ca signifie que ton code fonctionne sur ta machine 32-bit (et sur la mienne
avec un compilateur 32-bit), mais qu'il n'est pas portable. C'est un problème
ou non, c'est toi qui vois.
Enfin, il est d'usage que les chaines d'erreur soient envoyées vers 'stderr'
plutôt que 'stdout'.
In 'fr.comp.lang.c', mat <nobody@thehouesacge.com> wrote:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
Huh! Dans quel bouquin as-tu appris ce vieux style? Depuis 1989, on écrit:
size_t _get_file_size (FILE *fp)
Le prefix '_' est acceptable car il est suivit d'une minuscule, mais il
apporte plutôt de la confusion qu'autre chose.
size_t get_file_size (FILE *fp)
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
Attention, le type retourné par ftell() est 'long'. Or un long ne tient pas
forcément dans un size_t (Chez moi, en 16-bit, ça couine).
Ca signifie que ton code fonctionne sur ta machine 32-bit (et sur la mienne
avec un compilateur 32-bit), mais qu'il n'est pas portable. C'est un problème
ou non, c'est toi qui vois.
Enfin, il est d'usage que les chaines d'erreur soient envoyées vers 'stderr'
plutôt que 'stdout'.
In 'fr.comp.lang.c', mat wrote:#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define DBG 1
size_t _get_file_size ( fp )
FILE *fp;
Huh! Dans quel bouquin as-tu appris ce vieux style? Depuis 1989, on écrit:
size_t _get_file_size (FILE *fp)
Le prefix '_' est acceptable car il est suivit d'une minuscule, mais il
apporte plutôt de la confusion qu'autre chose.
size_t get_file_size (FILE *fp)
fprintf(stdout, "fseek failed on file : %sn", strerror(errno));
else
size = ftell(fp);
Attention, le type retourné par ftell() est 'long'. Or un long ne tient pas
forcément dans un size_t (Chez moi, en 16-bit, ça couine).
Ca signifie que ton code fonctionne sur ta machine 32-bit (et sur la mienne
avec un compilateur 32-bit), mais qu'il n'est pas portable. C'est un problème
ou non, c'est toi qui vois.
Enfin, il est d'usage que les chaines d'erreur soient envoyées vers 'stderr'
plutôt que 'stdout'.
- est-il possible d'imprimer le contenu de p_buffer sur la sortie
standard pour que le contenu du fichier s'affiche à l'écran?
Tout à fait, sauf si éventuellement ta sortie standard ne sait pas
afficher tous les caractères contenus dans le fichier.
- est-il possible d'imprimer le contenu de p_buffer sur la sortie
standard pour que le contenu du fichier s'affiche à l'écran?
Tout à fait, sauf si éventuellement ta sortie standard ne sait pas
afficher tous les caractères contenus dans le fichier.
- est-il possible d'imprimer le contenu de p_buffer sur la sortie
standard pour que le contenu du fichier s'affiche à l'écran?
Tout à fait, sauf si éventuellement ta sortie standard ne sait pas
afficher tous les caractères contenus dans le fichier.
salut,
ma sortie peut effectivement le faire, en faisant un cat test.jpg le
contenu s'affiche correctement. avec quelles fonctions puis-je le faire
en C ?
salut,
ma sortie peut effectivement le faire, en faisant un cat test.jpg le
contenu s'affiche correctement. avec quelles fonctions puis-je le faire
en C ?
salut,
ma sortie peut effectivement le faire, en faisant un cat test.jpg le
contenu s'affiche correctement. avec quelles fonctions puis-je le faire
en C ?