EnzoFerber
(usa FreeBSD)
Enviado em 05/04/2008 - 14:31h
Galera,
To com um problema aqui que já não sei mais como resolver. Eu to tentando fazer tipo uma função cat.
Com arquivos txt, c, etc ela funciona, mas com arquivos jpg, binarios e afins não.
O codigo é esse:
// mcat.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (int argc, char **argv)
{
FILE *fp;
register int i = 0;
char *file;
struct stat file_attr;
// Checa argumentos da funçao main()
if (argc < 2)
{
printf("Uso: %s <arquivo>\n", argv[0]);
return 0;
}
// Abre o arquivo como 'binario para leitura'
fp = fopen(argv[1], "rb+");
if (!fp)
{
perror("[*] fopen");
return 0;
}
// stat(file)
if (stat(argv[1], &file_attr) == -1)
{
perror("[*] stat()");
return 0;
}
printf("File size (bytes): %d\n", file_attr.st_size);
// Aloca memoria para file
file = (char*) malloc (file_attr.st_size * sizeof (char));
if (!file)
{
perror("[*] malloc()");
return 0;
}
// Executa leitura do arquivo
while(1)
{
if (feof(fp)) break;
fscanf(fp, "%c", &file[i]);
i++;
}
printf("strlen(file - bytes): %d\n", strlen(file));
for (i = 0; i < strlen(file); i++)
printf("%c", file[i]);
free(file);
return 0;
}