C/Visual C - FTP

 
Vista:

FTP

Publicado por Anais Aponte (1 intervención) el 09/11/2001 11:05:14
Hola, gracias por tomarte el tiempo para ayudarme en esta duda: La misma es la siguiente: Estoy trabajando en un programa en C (linux Red Hat) y necesito leer un archivo que se encuentra en otra maquina en mi misma red por lo que necesito bajarmelo a mi maquina y desde alli leerlo y hacer con el todo lo que necesito. Todo esto desde mi codigo (es decir) que sea transparente para el usuario de mi aplicacion. La cosa es: Como me lo bajo? supongo que un FTP a traves de la funcion exec podria funcionar pero no tengo mucha experiencia usando esta funcio asi que si sabes o se te ocurre alguna otra forma te agradeceria de todo corazon me escribieras a [email protected]
Muchas Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Descarga de archivos desde una máquina remota en Linux

Publicado por Alejandro (913 intervenciones) el 22/10/2024 19:53:16
¡Hola, Anais! Entiendo que necesitas descargar un archivo de otra máquina en tu red desde un programa en C en Linux. Hay varias formas de hacerlo, y aquí te presento algunas opciones:

1. Usar `libcurl`



Una de las formas más sencillas y efectivas de descargar archivos en C es utilizando la biblioteca `libcurl`. Esta biblioteca permite realizar transferencias de datos con varios protocolos, incluyendo FTP.

Instalación de `libcurl`



Primero, asegúrate de tener `libcurl` instalada en tu sistema. Puedes instalarla usando el siguiente comando:

1
sudo yum install libcurl-devel

Ejemplo de código



Aquí tienes un ejemplo de cómo usar `libcurl` para descargar un archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <curl/curl.h>
 
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}
 
int main() {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    const char *url = "ftp://usuario:contraseña@direccion_ip/ruta/del/archivo.txt"; // Cambia esto
    const char *outfilename = "archivo.txt"; // Nombre del archivo local
 
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename, "wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L); // Desactivar EPSV si es necesario
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(fp);
 
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            printf("Archivo descargado exitosamente.\n");
        }
    }
    return 0;
}

2. Usar `system()` para ejecutar comandos de shell



Si prefieres no usar bibliotecas externas, puedes usar la función `system()` para ejecutar comandos de shell. Por ejemplo, puedes usar `wget` o `curl` directamente desde tu código.

Ejemplo de código



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdlib.h>
 
int main() {
    const char *url = "ftp://usuario:contraseña@direccion_ip/ruta/del/archivo.txt"; // Cambia esto
    const char *command = "wget -O archivo.txt ftp://usuario:contraseña@direccion_ip/ruta/del/archivo.txt"; // Cambia esto
 
    int result = system(command);
    if (result == 0) {
        printf("Archivo descargado exitosamente.\n");
    } else {
        printf("Error al descargar el archivo.\n");
    }
 
    return 0;
}

Consideraciones



- Seguridad: Ten cuidado al incluir credenciales en la URL. Considera usar métodos más seguros para manejar contraseñas.
- Permisos: Asegúrate de que tu usuario tenga permisos para acceder al archivo en la máquina remota.
- Dependencias: Si decides usar `libcurl`, asegúrate de que esté instalada y enlazada correctamente en tu proyecto.

¡Buena suerte con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar