Ir para conteúdo
Fórum Script Brasil
  • 0

alguém me ajuda


pjota

Pergunta

peço e agradeço a colaboração dos mestres.

Escrever um programa que recebe como argumentos os nomes de dois ficheiros seguidos de 2 numeros que identificam a posição dentro de um ficheiro e o comprimento em bytes a partir da respectiva posição.

atenção os seguintes pontos:

i) O programa deve validar que estão presentes os 4 argumentos, escrevendo uma mensagem com o aspecto: Usage: myprog file1 file2 startPos len

ii) Obviamente deverá controlar que file1 e file2 existem e/ou estão acessíveis para leitura/escrita e a não ser esse o caso escreverá a menssagem:

ERROR myprog.c(100) : fail to fopen file x1 em modo ??.

v) Todas as chamadas às várias funções devem ser validadas sendo em caso de falha escrita uma menssagem do tipo: ERROR myprog.c(120) :

fail to fseek file x1 to position 1024 from start of file.

vi) Deverá criar um macro para o fopen usado na abertura dos ficheiros.

vii) Idealmente seria muito interessante desenvolver um macro para a escrita das mensagens de erro.

viii) Os ficheiros terão que ter dimensão para conter a referida zona e se não for o caso, não faz nada. iv) Se os bytes nessas duas zonas dos ficheiros forem

diferentes, deverá trocar o conteúdo de uma zona de um ficheiro com o conteúdo da zona correspondente no outro ficheiro.

eu tenho isto mais ou menos, alguém pode verificar se sim..............

#include <stdio.h>

#define MAX

#define mFopen(fp,file,mode) do { \

if ( NULL == (fp=fopen(file, mode)) ) \

{ \

printf("ERROR myprog.c: fail to open file %s em modo %s \n",file,mode); \

exit(1); \

} \

}while(0)

int main(int argc, char *argv[])

{

FILE *fp1, *fp2;

char F1[100];

char F2[100];

int i, pos, len;

char ch1,ch2;

int fseek_f1 = 0;

int fseek_f2 = 0;

fp1=NULL;

fp2=NULL;

if(argc!=5)

{

printf("Usage: myprog file1 file2 startPos len\n");

}

else

{

pos = atoi(argv[3]);

len = atoi(argv[4]);

mFopen(fp1, argv[1] , "r+");

mFopen(fp2, argv[2] , "r+");

fseek_f1 = fseek(fp1, pos, SEEK_SET);

fseek_f2 = fseek(fp2, pos, SEEK_SET);

printf("--- fseek_f1 %d fseek_f2 %d ---\n",fseek_f1,fseek_f2);

for(i = 0; i < len; i++)

{

ch1=fgetc(fp1);

ch2=fgetc(fp2);

fseek_f1 = fseek(fp1, pos+i, SEEK_SET);

fseek_f2 = fseek(fp2, pos+i, SEEK_SET);

printf("--- fseek_ %d fseek_f2 %d ---\n",fseek_f1,fseek_f2);

fputc(ch1,fp2);

fputc(ch2,fp1);

}

fclose(fp1);

fclose(fp2);

}

return 0;

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...