jueves, 7 de febrero de 2013

Logs NDK



En ocasiones es necesario imprimir algún valor cuando realizamos una librería para ndk, una forma sencilla de realizar esta función es con: __android_log_print, que está incluida en <android/log.h>.
Código de Ejemplo:

#include <android/log.h>
#define APPNAME "spg0x01Log" 
void  printLog()
{
...
...
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME,"Test log value:%d",fooint);
...
...
} 
Al código en Android.mk se tiene que agregar la librería: llog en la opción: LOCAL_LDLIBS. Línea para el archivo Android.mk:
LOCAL_LDLIBS := -llog

martes, 5 de febrero de 2013

Recuperar Archivos PDF


Reparar archivos PDF, en ocasiones se pueden abrir los archivos en una PC pero al pasar el mismo archivo a un smartphone o tratar de abrirlo en otra aplicación se tiene problemas para ver su contenido. Aquí dejo la solución:
Instalar pdftk, está disponible en la mayoría de los repositorios Linux y ofrece muchas operaciones sobre archivos PDF:
[root@0x00000 ~]#yum install pdftk
Ejecutar la recuperación:
[spg0x01@0x00000 ~]$ pdftk pdf_dañado.pdf output pdf_recuperado.pdf

Multiple definition, linkage error C

Error: multiple definition of  `......' .first defined here.
Solución: Agregar al compilar las opciones:  -Xlinker -zmuldefs
Ejemplo:
[spg0x01@0x00000 ~]$ gcc -Xlinker -zmuldefs -o "foobin"  ./common.o ./foo.o ./utils.o 

Sendmail cannot open cf.m4


Cannot open `/usr/share/sendmail-cf/m4/cf.m4': No such file or directory
Solución:
[spg0x01@0x00000 ~]$ yum install sendmail-cf

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.