Posts Tagged ‘c’

C# : Descargar un fichero de un FTP con .NET

En estos últimos posts hemos visto como conectarnos a un servidor FTP, como listar los archivos encontrados, como conseguir la talla de un fichero especifico y ahora cerramos este tour descargando ese archivos con el siguiente snippet :

FtpWebRequest request = FtpWebRequest.Create([FTPAddress] + "/" + filename) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.DownloadFile;

Y despues necesitaremos crear una bucle while  con el siguiente código :

int bytesRead = reader.Read(buffer, 0, buffer.Length);

Donde reader es el ResponseStream. La variable bytesRead retorna cuantos bytes hemos descargado hasta el momento. Cuando bytesRead llegue a 0 podremos romper la bucle.

Share

C# : Conseguir la talla de un fichero en un servidor FTP con .NET

Seguimos con este mini monográfico sobre el FTP en .NET. Ahora ya sabemos como conectarnos a un servidor FTP, y como listar los ficheros remotos.

Ahora si queremos saber la talla de uno de esos fichero remotos podemos hacer lo siguiente :

FtpWebRequest request = FtpWebRequest.Create([FTPAddress]) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.ListDirectory;

int dataLength = (int)request.GetResponse().ContentLength;
Share

C# : Listar ficheros de un servidor remoto FTP en .NET

Si necesitáis listar ficheros de un servidor FTP podéis usar el código siguiente (doy por hecho el que ya os habéis conectado al servidor FTP, sino mirar el post relacionado) :

FtpWebRequest request = FtpWebRequest.Create([FTPAddress]) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.ListDirectory;

Y ahora “leemos” el contenido de dicho directorio :

List<string> files = new List<string>();
StreamReader reader = new StreamReader(responseStream);

while (!reader.EndOfStream)
{
     Application.DoEvents();
     files.Add(reader.ReadLine());
}
reader.Close();
Share

C# : Conectar a servidor FTP con .NET

Si necesitamos conectar a un server FTP usando .NET y C# este código os puede ser de utilidad…

FtpWebRequest request = FtpWebRequest.Create([FTPString]) as FtpWebRequest;

request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = true;

FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream responseStream = response.GetResponseStream();

//... Aqui podeis meter los comandos FTP que necesiteis...
responseStream.Close();
response.Close(); //Cerramos la conexión con el server...
Share

C: clone()

La llamada al sistema clone es mucho más genérica y flexible que el fork, ya que nos permite definir qué van a compartir los procesos padre e hijo.
clone: permite especificar qué queremos que compartan padre e hijo.

  • espacio de direccionamiento
  • información de control del sistema de archivos (file system)
  • descriptores de archivos abiertos.
  • gestores de señales o PID.

En el clone el hijo en principio dispondrá de exactamente los mismos campos del task_struct del padre y sólo realizará una copia de estos en caso de modificar alguno de ellos. Si esto ocurre debe asignarsele al hijo su propio PID.

Share

C: fork()

Cuando se hace una llamada fork, el proceso hijo creado es una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. Es importante destacar que las variables del proceso hijo son una copia de las del padre (no se refieren físicamente a la misma variable), por lo que modificar una variable en uno de los procesos no se refleja en el otro.

fork: En el momento de la llamada a fork el proceso hijo:

  • es una copia exacta del padre excepto el PID.
  • tiene las mismas variables y ficheros abiertos.
  • las variables son independientes (padre e hijo tienen distintas memorias).
  • los ficheros son compartidos (heredan el descriptor).

En el fork() el hijo creado obtiene una copia de todos los campos del task_struct del padre y su propio identificador.

#include <stdio.h>
#include <unistd.h>

Void main() {
  pid_t pID = fork();
  if (pID == 0) {
    // Hijo
    printf("¡¡¡Soy el hijo!!!");
  }else if (pID > 0) {
    // Padre
    printf("¡¡¡Soy el padre!!!");
  }else {
    // Error al hacer el fork
    // Throw exception
    printf("¡¡¡Error!!!");
  }
}

Referencias:

Linux cross reference
http://lxr.linux.no/

Share

C# : Creación de Clases y objetos

Ahora un post casi casi calcando al anterior pero con C Sharp…

Class Coche
{
    public string Modelo;
    public double Precio;
    public int NumeroDeVelocidades
    private int Velocidad

    public void Acelerar(int km)
    {
       Velocidad = Velocidad + km;
    }

    public void Frenar()
    {
       if (Velocidad > 0)
       {
          Velocidad = Velocidad - 1;
       }
    }

    public int ConsultarVelocidad()
    {
       return Velocidad;
    }
}

Al igual que en post anterior, podemos encontrar como propiedades de la Clase : Modelo, Precio, NumeroDeVelocidades y Velocidad, y como métodos de la clase : Acelerar(km) , Frenar() y ConsultarVelocidad().

Y mostraremos también como instanciar dicha clase :

Coche objCoche = new Coche();

int VelocidadActual;

objCoche .Modelo = "Montaña";
objCoche .Precio = 200;
objCoche .NumeroDeVelocidades = 21;

objCoche .Acelerar(5);
objCoche .Frenar();

VelocidadActual = objCoche .ConsultarVelocidad();
Share