elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu  (Leído 3,408 veces)
antoniosan20

Desconectado Desconectado

Mensajes: 5


Ver Perfil
ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« en: 9 Agosto 2016, 07:12 am »

hola, me pueden ayudar hacer un programa en C que haga lo mismo que hace el comando cp en ubuntu, tiene que copiar ya sea una cancion o un archivo de texto. ayuda por favor...!


« Última modificación: 9 Agosto 2016, 07:19 am por antoniosan20 » En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.287

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #1 en: 9 Agosto 2016, 12:36 pm »

te faltó aclarar para que S.O y si tiene que recibir la misma cantidad de parámetros.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.648

🏴 Libertad!!!!!


Ver Perfil WWW
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #2 en: 9 Agosto 2016, 15:27 pm »

El sistema me imagino es independiente.

Y tambien supongo que con solo 2 parametros son suficientes.

Voy a dejar aqui un bosquejo del código en C, funciona para cualquier sistema, estoy en el movil ahora y puede tener errores.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. char buffer[256];
  5.  
  6. int main(int argc, char **argv){
  7. FILE *origen = NULL;
  8. FILE *destino = NULL;
  9. size_t leido;
  10. if(argc < 3){
  11. exit(0);
  12. }
  13. origen = fopen(argv[1],"rb");
  14. destino = fopen(argv[2],"wb");
  15. while(!feof(origen)){
  16. leido = fread(buffer,1,256,origen);
  17. fwrite(buffer,1,leido,destino);
  18. }
  19. fclose(origen);
  20. fclose(destino);
  21. return 0;
  22. }
  23.  

saludos!
« Última modificación: 9 Agosto 2016, 17:56 pm por AlbertoBSD » En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #3 en: 9 Agosto 2016, 18:43 pm »

La mayoría de dispositivos trabaja con bloques de 512 bytes, ¿no sería mejor usar un búfer de 512 bytes? También podrías parametrizar el tamaño del búfer y hacer un malloc, como el comando dd.

Otra cosilla, aunque este programa en la mayoría de casos funcione sin inconvenientes, hay algunos casos en los que fallará. Creo que esta sería la solución:

Código
  1. while(!feof(origen)){
  2. leido = fread(buffer,1,256,origen);
  3. if(0 < leido)
  4. fwrite(buffer,1,leido,destino);
  5. }
« Última modificación: 9 Agosto 2016, 18:48 pm por class_OpenGL » En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.648

🏴 Libertad!!!!!


Ver Perfil WWW
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #4 en: 9 Agosto 2016, 19:42 pm »

Si claro hay muchos detalles que considere, no se valida que el archivo de origen exista y que tengamos permisos de escritura en el directorio actual. Como comente lo escribí desde el Movil  ;D ;D  :silbar:

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. #define BSIZE 512
  5.  
  6. char buffer = NULL;
  7.  
  8. int main(int argc, char **argv){
  9. FILE *origen = NULL;
  10. FILE *destino = NULL;
  11. size_t leido;
  12. if(argc < 3){
  13. exit(0);
  14. }
  15. buffer = malloc(BSIZE);
  16. origen = fopen(argv[1],"rb");
  17. destino = fopen(argv[2],"wb");
  18. if(!origen &&  !destino && !buffer ){
  19. exit(0);
  20. }
  21. while(!feof(origen)){
  22. leido = fread(buffer,BSIZE,origen);
  23. if(0 < leido)
  24. fwrite(buffer,1,leido,destino);
  25. }
  26. fclose(origen);
  27. fclose(destino);
  28. return 0;
  29. }
« Última modificación: 9 Agosto 2016, 19:45 pm por AlbertoBSD » En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #5 en: 10 Agosto 2016, 09:40 am »

¡Buenas!

Si vas a leer desde un archivo que no sea de texto olvídate de utilizar la función feof. Lo más normal es que el indicador de fin de archivo se active antes de llegar al final y que acabes con un archivo incompleto.

Lo que tendrías que hacer es usar funciones que te permitan saber cual es el tamaño del archivo. En las librerías estándar de C y C++ tienes funciones y miembros de clases de entrada/salida que te permiten ir a una posición en concreto de un archivo y saber en que posición estás, combinarlas para obtener el tamaño es cosa tuya, una vez que conozcas ese dato ya podrás leer todos los datos que contiene el archivo.
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
antoniosan20

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #6 en: 12 Agosto 2016, 07:28 am »

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6.  
  7. int main (int argc, char *argv[])
  8. {
  9. if (argc < 3){
  10. printf("Hacen falta parametros\n");
  11. return -1;
  12.       }
  13.    else if(argc > 3){
  14.      printf("Hay exceso de parametros\n");
  15.         return -1;
  16.  
  17. }
  18.  
  19.         else {
  20.  
  21.           int f_origen, f_destino, buffer, opcion;
  22.           f_origen=open(argv[1], O_RDONLY);
  23.           if(f_origen < 0){
  24.           printf("fichero 1 no existe, por favor intente de nuevo");
  25.            return -1;
  26.            }
  27.            f_destino = open(argv[2], O_RDWR);
  28.            if(f_destino < 0){
  29.             printf("%s creado!!\n", argv[2]);
  30.             f_destino = creat(argv[2],0777);
  31.  
  32.                  while(read(f_origen, &buffer, sizeof(buffer)) > 0){
  33.                      write(f_destino, &buffer, sizeof(buffer));
  34.                                    }
  35.                    close(f_origen);
  36.                    close(f_destino);
  37.                    return -1;
  38.                }
  39.  
  40.  
  41.               else{
  42.                printf("Desea sobre escribir?: 1-Si 2-No\n");
  43.                  scanf("%d", &opcion);
  44.  
  45.                  if(opcion == 1){
  46.  
  47.                     f_destino =  open(argv[2], O_CREAT | O_RDWR);
  48.                        while(read(f_origen, &buffer, sizeof(buffer)) > 0){
  49.                      write(f_destino, &buffer, sizeof(buffer));
  50.  
  51.                         }
  52.                           close(f_origen);
  53.                    close(f_destino);
  54.                    return -1;
  55.  
  56.                        }
  57.                           else{
  58.                               printf("Cerrando el proceso");
  59.                                close(f_origen);
  60.                                  return -1;
  61.                                   }
  62.  
  63.                }
  64. }
  65.                                   return 0;
  66.  
  67.           }
« Última modificación: 12 Agosto 2016, 07:46 am por engel lex » En línea

antoniosan20

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #7 en: 12 Agosto 2016, 07:30 am »

bueno. me funciono. gracias por la ayuda.
pero ahora quiero hacer con este mismo programa hacer un mapeo... tienen alguna idea que me pueda servir... estoy trabajando desde ubuntu... gracias...!
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.648

🏴 Libertad!!!!!


Ver Perfil WWW
Re: ayuda.hacer un programa en C, que haga lo mismo que hace el comando cp en ubuntu
« Respuesta #8 en: 12 Agosto 2016, 07:59 am »

Hola que bueno que lograras hacerlo por tu cuenta o por lo menos eso espero que sea.

Y que minimo te sirviera de algo el codigo que te puse...  :P ya que a mi forma de ver las cosas era más sencillo mi codigo que el que pusiste

Si gustas crea un nuevo tema para tu otro problema y explica mejor que es lo que quieres hacer.
En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
busco un programa que haga que una pelicula se haga en 2 trozos
Multimedia
daygo 3 1,928 Último mensaje 30 Octubre 2004, 23:00 pm
por Songoku
Como hacer que mi programa haga que otro..
Programación Visual Basic
Sai-To 2 1,354 Último mensaje 2 Marzo 2008, 05:16 am
por LeandroA
Hacer lo mismo que hace Cheat Engine desde VB6
Programación Visual Basic
extreme69 3 3,177 Último mensaje 21 Julio 2011, 05:42 am
por extreme69
Ayuda sobre un programa que haga lo siguiente
Seguridad
Senior++ 4 2,179 Último mensaje 8 Agosto 2011, 11:22 am
por .:UND3R:.
¿que comando sirve para saber que hace un programa?
Windows
misforos 1 1,735 Último mensaje 25 Diciembre 2017, 23:12 pm
por [Arg] $triker;
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines