/* * Altera uma posição de um vetor escrito em um arquivo binário. Lê este vetor * e o escreve em um arquivo texto. */ #include #include void altera(int pos, int valor) { FILE *f; f = fopen ("v.bin", "r+"); if (f == NULL) { perror("v.bin: "); exit(-1); /* Abandona o programa */ } /* a primeira posição é o tamanho do vetor */ fseek(f, (pos+1)*sizeof(int), SEEK_SET); fwrite(&valor, sizeof(int), 1, f); fclose(f); } int *le_vetor_binario(int *n) { FILE *fr; int *v; fr = fopen ("v.bin", "r"); if (fr == NULL) { perror("v.bin: "); exit(-1); /* Abandona o programa */ } fread(n, sizeof(int), 1, fr); v = (int *) malloc (*n * sizeof(int)); fread(v, sizeof(int), *n, fr); fclose(fr); return v; } void escreve_vetor_texto(int *v, int n) { FILE *fw; int i; fw = fopen ("v-out.txt", "w"); if (fw == NULL) { perror("v-out.txt "); exit(-1); /* Abandona o programa */ } fprintf(fw, "%d\n", n); /* Dimensão do vetor */ for (i = 0; i < n; i++) fprintf(fw, "%d\n", v[i]); fclose(fw); } int main() { int *v, n; altera (5, -5); v = le_vetor_binario(&n); escreve_vetor_texto(v, n); free(v); return 0; }