Я работаю над упрощенной версией функции tr, структура выглядит следующим образом:
mytr char1 char2 file1 file2.
Пока единственная функция, которую я хочу сделать, - это заменить char1 в file1 на char2 в file2. На данный момент я могу копировать только содержимое файла file1 в файл file2, но символы не меняются. Я установил названия функций на испанском языке, поэтому вот переводы: Abrir -> Open; Cerrar -> Закрыть; Лер -> Читать; daerror -> показывает сообщение о том, какой должна быть реализация.
Я знаю, что не использовал функцию Leer, но я не был уверен на 100%, правильно ли это, поэтому я просто использовал функцию чтения.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
int Abrir(char* nombre)
{
int result;
result=open(nombre,O_RDONLY);
return result;
}
int Cerrar(int fd){
if(close(fd)==-1){
fprintf(stderr,"error al cerrar el fichero\n");
exit(-1);
}
}
char Leer(int fd){
char car;
int nbytes;
nbytes=read(fd,&car,sizeof(char));
if(nbytes==-1){
fprintf(stderr,"Error en la lectura del fichero\n");
exit(-1);
}
if(nbytes==0){
return car;
// car='\0';
}
return car;
}
void daerror(){
printf("Utilizacion funcion: mitr caracter1 caracter2 fichero1 fichero2 <Cambia los caracteres de 1 en 2 y lo pone en el fichero2>\n");
}
void main(int argc, char* argv[]){
int arch2;
if(argc>0){
char* cadena1=argv[2];
char* cadena2=argv[3];
char* ficheroabrir=argv[4];
char* ficherocrear=argv[5];
int arch1=Abrir(ficheroabrir);
int arch2=Abrir(ficherocrear);
char c;
if(arch1==-1){
printf("no existe el fichero origen");
exit(-1);
}else if(arch2==-1){
printf("entra aqui");
int fd2 = open(ficherocrear,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while(read(arch1,&c,sizeof(c)!=0)){
if(c!=*cadena1){
write(fd2,&c,sizeof(c));
}else{
write(fd2,&cadena2,sizeof(char));
}
}
Cerrar(fd2);
Cerrar(arch1);
exit(0);
}
}else{
daerror();
}
}
Мой вывод просто помещает содержимое файла file1 в file2, но не вносит изменения char1 в char2