fopen, fclose, fgetc, fprintf, fputc, fread, fwrite, stat, fscanf
root_dir root_dir/d1 root_dir/d1/e1.txt root_dir/d1/e2.bak root_dir/d1/e3.bal root_dir/d1/dd1/e4.bak root_dir/d1/dd1/e5.txt root_dir/d2/e6.bal root_dir/d2/e7.txt root_dir/d2/dd2/e8.bak root_dir/d2/dd2/e9.txt root_dir/e10.txt root_dir/e11.bak
Estas funciones pueden contener errores y estar incompletas (no se chequean errores). Usted es responsable de corregirlas o completarlas.
int get_len(char *data) {
int len=0;
while(data[len]!='\0'){
len++;
}
return(len);
}
char * get_dir(char *filename) {
char *output;
output=calloc(256, sizeof(char));
int last_dir_pos=0;
int i;
for (i=0; i<256; i++) {
if (filename[i]=='/') {
last_dir_pos=i;
} else {
if (filename[i]=='\0') {
break;
} else {
if (filename[i]=='\n') {
break;
}
}
}
}
if ((i==256) || (last_dir_pos==0)) {
output[0]='\0';
} else {
for (i=0; i<last_dir_pos; i++) {
output[i]=filename[i];
}
}
return(output);
}
void mystrcpy(char *dataout, char *datain) {
int i=0;
char c;
while ((c=datain[i])!='\0') {
dataout[i]=c;
i++;
}
dataout[i]='\n';
dataout[++i]='\0';
}
char *grow_str(char *old, char sep, char *new) {
int old_total_size=get_len(old);
printf("Grow str old len %d, new len %d\n", old_total_size, (get_len(old)+get_len(new)+2));
char *output=realloc(old, sizeof(char)*(get_len(old)+get_len(new)+2));
output[old_total_size]=sep;
mystrcpy(output+old_total_size+1, new);
output[old_total_size+get_len(new)+1]='\0';
return(output);
}
bool is_txt(char *filename) {
int len;
len=get_len(filename);
if ((filename[len-1]=='t') && (filename[len-2]=='x') && (filename[len-3]=='t')){
return(true);
} else {
return(false);
}
}
bool is_dir(char *filename) {
struct stat mystat;
printf("Is dir? %s\n", filename);
if (stat(filename, &mystat)!=0) {
printf("Error %d\n", errno);
printf("%s\n", strerror(errno));
exit(0);
}
mode_t mymode;
mymode=mystat.st_mode;
if (S_ISDIR(mymode)) {
return(true);
} else {
return(false);
}
}