Salve a tutti. Ho scritto un programma in c per copiare i files chiamato "cp.c", sotto windows funziona egregiamente ma sotto mac (dopo aver compilato ovvio) il file scritto non appariva... perciò ho aggiunto un controllo nel programma c ed effettivamente scrive sul file ma quando viene chiuso non esiste su disco.
Ho provato anche aggiungendo "sudo" all'inizio del comando ma nulla...
Come risolvo?
Questo è il mio output:
Questo è il programma:codice:MacBook-Pro-di-Tommaso-Ricci:C zorgatone$ ls alunni.dat cp.c employee.c file.c read cp employee file prova.dat read.c MacBook-Pro-di-Tommaso-Ricci:C zorgatone$ ./cp file file2 Starting... file->file2 Pos: 9056 Error on written file. Error during file coping. Closing... MacBook-Pro-di-Tommaso-Ricci:C zorgatone$
Codice PHP:// cp.c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#define N 250
typedef unsigned char BYTE;
bool filecopia(char *filename, char *file2);
bool canopen(char * filename, char *mode);
int main(int argc, char *argv[]) {
if(argc != 3 || (argc >= 2 && strcmp(argv[1], "--help") == 0) || (argc >= 2 && strcmp(argv[1], "--h") == 0) || (argc >= 3 && strcmp(argv[2], "--help") == 0) || (argc >= 3 && strcmp(argv[2], "--h") == 0)) {
printf("Usage: \"%s source destination\".\n", argv[0]);
return 0;
}
if(!canopen(argv[1], "rb")) {
fprintf(stderr, "Cannot open file 1.\n");
exit(EXIT_FAILURE);
}
else if(!canopen(argv[2], "wb")) {
fprintf(stderr, "Cannot open file 2.\n");
exit(EXIT_FAILURE);
}
else {
printf("Starting...\n");
if(filecopia(argv[1], argv[2])) {
printf("Success!\n");
return 0;
}
}
fprintf(stderr, "Error during file coping.\nClosing...\n");
exit(EXIT_FAILURE);
}
bool canopen(char * filename, char *mode) {
FILE *fp;
if(!(fp = fopen(filename, mode))) {
return false;
}
fclose(fp);
return true;
}
bool filecopia(char *filename, char *file2) {
printf("%s->%s\n", filename, file2);
FILE *f1 = fopen(filename, "rb"), *f2 = fopen(file2, "wb");
char buf1[N], buf2[N];
BYTE p;
int pos, i = 0;
if(canopen(file2, "rb")) {
remove(file2);
}
if (!f1 || !f2) {
fprintf(stderr, "Error opening files.\n");
fclose(f1);
fclose(f2);
return false;
}
setvbuf(f1, buf1, _IOFBF, N);
setvbuf(f2, buf2, _IOFBF, N);
fseek(f1, 0L, SEEK_END);
pos = ftell(f1);
printf("Pos: %d\n", pos);
rewind(f1);
while(i++<pos) {
fread(&p, 1, 1, f1);
fwrite(&p, 1, 1, f2);
}
fclose(f1);
fclose(f2);
if (!canopen(file2, "rb")) {
fprintf(stderr, "Error on written file.\n");
return false;
}
return true;
}


Rispondi quotando