viernes, 13 de enero de 2012

Fechas de archivos ANSI C


En ocasiones es necesario saber la fecha de creación, modificación, hora del último acceso a un archivo y otros parámetros del mismo.
Pero para no pelear con el SO se puede utilizar la librería <sys/stat.h> de C. Aquí un ejemplo de como obtener la fecha de creación y sacar la diferencia de minutos transcurridos a la fecha:


#include<stdio.h>
#include<time.h>
#include<string.h>
#include<sys/stat.h>

void main(void)
{
        /*Nombre del archivo*/
        char *file_name;
        /*Tiempo en esté momento*/
        time_t time_now = time(NULL);
        /*Diferencia de tiempo*/
        float diff ;
        /*Estructura en donde se almacenará toda la info del archivo*/
        struct stat strbuf;
        /*Se copia la ruta del archivo*/
        strcpy(file_name, "/home/spg0x01/archivo_prueba.xy");
        /*Minutos de diferencia*/
        int minutos = 0 ;
        /*Llamada a stat*/
        stat(file_name, &strbuf);
        /*Diferencia de tiempo*/
        diff = difftime(time_now, strbuf.st_ctime);
        minutos = diff/60.0;
        printf("minutos de diferencia %d\n", minutos);

}

Resultado:


*El el primer comando se obtiene la fecha de creación del archivo y son las 15:11
*En el segundo se ejecuta el programa y marca que hay una diferencia de 8 minutos
*En el tercero se corrobora que son las 15:19 ( 15:19 - 15:11 = 8 min).
Se pueden consultar las demás opciones de stat haciendo un man stat.h en Linux y
en windows...... instalen linux.

Saludos.




jueves, 12 de enero de 2012

Apuntes sobre cabeceras ctype y string


Con la finalidad de saber donde encontrarlo, quise agregar una entrada sobre algunas funciones de ctype.h y string.h de  C.

Fuente:El Lenguaje de Programación C, Jernighan y Ritchie (pearson)
s y t son de tipo char *, c y n son de tipo int

<string.h> - string operations

strcat(s,t);   concatena t al final de s
strncat(s,t,n); concatena n caracteres de t al final de s
strcmp(s,t); regresa negativo, cero o positivo para s < t, s==t, s > t
strncmp(s,t); igual que strcmp pero sólo en los primeros n caracteres
strcpy(s,t); copia t en s
strncpy(s,t,n); copia a lo más n caracteres de t sobre s
strlen(s);        regresa la longitud de s
strchr(s,c); regresa un apuntador al primer c que esté en s, o NULL si no está presente
strchr(s,c); regresa un apuntador al último c que esté en s, o NULL si no está presente. 


<ctype.h> - character types

isalpha(c);  diferente de cero si c es alfabética, 0 si no lo es
isupper(c); diferente de cero si c es mayúscula, 0 si no lo es
islower(c); diferente de cero si c es minúscula, 0 si no lo es
isdigit(c);      diferente de cero si c es un dígito, 0 si no lo es 
isalnum(c); diferente de cero si es alfanumérica, 0 si no lo es
isspace(c); diferente de cero si es un espacio en blanco, tabulador, nueva línea, retorno de carro,    avance de línea o tabulador vertical o 0 si no lo es
toupper(c); regresa c convertida a mayúscula
tolower(c); regresa c convertida a minúscula

para más información pueden revisar el POSIX Programmer’s Manual en Linux con el comando man



miércoles, 11 de enero de 2012

Error:Extra qualification of members


Este error se debe a que en la versión estándar de g++, marca error al utilizar el nombre de la clase para calificar variables con el nombre de la misma.
Esto se permitía en versiones anteriores de g++, pero por ello es necesario hacer la modificación como se marca a continuación.

Error:
g++ -c xcode.cpp  
error: extra qualification 'xcode::' on member

Código:
class xcode 
{
public:
    void xcode::get();
    float xcode::mean(int x_var);
}

Solución:
class xcode 
{
public:
    void  get();
    float mean(int x_var);
}

Saludos.

jueves, 5 de enero de 2012

Aplicaciones con puertos abiertos Linux

Primero hay que saber que puertos existen abiertos:
(se puede probar con -nlut para incluir udp.)
[root@0x00000 /]# netstat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address    State     
tcp        0      0 127.0.0.1:50505    0.0.0.0:*          LISTEN     
tcp        0      0 127.0.0.1:7337     0.0.0.0:*          LISTEN     
tcp        0      0 0.0.0.0:3306       0.0.0.0:*          LISTEN     
tcp        0      0 0.0.0.0:3790       0.0.0.0:*          LISTEN     
tcp        0      0 0.0.0.0:111        0.0.0.0:*          LISTEN
 

En este caso tengo algunos puertos abiertos por causa de x programa, puedo dar de baja el servicio y listo.
lsof  es comando que nos ayudará a encontrar el programa que mantiene abierto el puerto. De la misma forma se puede localizar los archivos que una dirección IP mantiene abiertos y muchas cosas más.

[root@0x00000 /]# lsof -i TCP:7337
COMMAND    PID TYPE DEVICE SIZE/OFF     NODE NAME
postgres  144  IPv4  108      0t0  TCP localhost.domain:7337 (LISTEN)
[root@0x00000 /]# lsof -i TCP:3306
COMMAND   PID  TYPE DEVICE SIZE/OFF NODE NAME
mysqld    168  IPv4 221950      0t0  TCP *:mysql (LISTEN)
Ahora solo hay que tomar las medidas necesarias.

Uso de ForkManager en perl

Definir que es un fork:
Se refiere a la bifurcación o crear una replica de un programa y que actúa como un proceso hijo del proceso original, ahora llamado padre.

Ejemplo: Cuando necesitas hacer una prueba DoS, puedes crear un programa que a su vez crea una replica de sí mismo o de un socket que realiza una conexión a un servidor.

El Error: 
[root@0x00000 ~]# perl file.pl
Can't locate Parallel/ForkManager.pm in @INC
[root@0x00000 ~]# yum search forkmanager
perl-Parallel-ForkManager.noarch
[root@0x00000 ~]# yum install perl-Parallel-ForkManager.noarch

Aquí un ejemplo con el cual podrían probar (solo con fines educativos).