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); \
Pergunta
pjota
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
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.