rendered paste body// **************************************// * Tar - zlaganje datotek v arhiv *// * *// * Jernej Virag *// **************************************#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{ char ime[FILENAME_MAX]; long offset;} F_Info;int main(int argc, char* argv[]){ //deklaracije spremenljivk FILE *arhiv; FILE *input; long headerpos=0; F_Info *fileinfo; //shranjuje podatke o zapisanih datotekah v arhivu char *buffer; int i; if (argc<3) { printf("Premalo parametrov. \n"); return -1;} arhiv=fopen(argv[1],"wb"); if (arhiv==NULL) { printf("Napaka pri pisanju arhiva."); return -1;} //zapiÅ¡emo glavo, da lahko kasneje prepoznamo zadevo buffer=(char*)malloc(4*sizeof(char)); strcpy(buffer,"ARH"); fwrite(buffer,sizeof(char),3,arhiv); //zaÄnemo pisati posamezne datoteke fileinfo=(F_Info*)malloc(sizeof(F_Info)); buffer=(char*)realloc(buffer,sizeof(char)); for (i=2; i<argc;i++) { printf("PiÅ¡em %s. \n",argv[i]); fileinfo=realloc(fileinfo,(i-1)*sizeof(F_Info)); strcpy(fileinfo[i-2].ime,argv[i]); //zapiÅ¡emo ime datoteke v strukturo fileinfo[i-2].offset=ftell(arhiv); //zapiÅ¡emo položaj zaÄetka datoteke input=fopen(argv[i],"rb"); if (input==NULL) // napaka pri odpiranju, postopek prekinjen {printf("Napaka pri odpiranju %s!\n",argv[i]); return -1;} //prekopiramo vsebino datoteke do { fread(buffer,sizeof(char),1,input); fwrite(buffer,sizeof(char),1,arhiv); } while(!feof(input)); fclose(input); } //datoteke so zapisane, moramo Å¡e zapisati njihov položaj *buffer=(char)1; //loÄimo z znakom 1 headerpos=ftell(arhiv); // shranimo si položaj zaÄetka informacij fwrite(buffer,sizeof(char),1,arhiv); for (i=0; i<(argc-2); i++) { printf("Zapisujem podatke o %s. \n",fileinfo[i].ime); fwrite(fileinfo[i].ime,sizeof(char),strlen(fileinfo[i].ime)+1,arhiv); fwrite(&fileinfo[i].offset,sizeof(long),1,arhiv); } //na Äistem koncu bo podatek o zaÄetku informacij fwrite(&headerpos,sizeof(long),1,arhiv); fclose(arhiv); free(fileinfo); free(buffer); printf("KonÄano. \n"); return 0;}