Mostrando entradas con la etiqueta c++. Mostrar todas las entradas
Mostrando entradas con la etiqueta c++. Mostrar todas las entradas

sábado, 19 de marzo de 2011

Variables de entorno para instalaciones personalizadas

Si esta copilando e instalando nuevas librerias y programas pero no quiere que estas sobreescriban versiones existentes en su sistema operativo Unix. Puede crear una nueva estructura de directorios para instalarlas ahi por ejemplo:
mkdir $HOME/cualquierpath
mkdir $HOME/cualquierpath/bin
mkdir $HOME/cualquierpath/sbin
mkdir $HOME/cualquierpath/lib
mkdir $HOME/cualquierpath/etc
mkdir $HOME/cualquierpath/share
mkdir $HOME/cualquierpath/include

Ahora puede copilar su libreria indicandole donde tiene que instalarlo, para ello es necesario que tenga generado el archivo configure y pasarle la variable siguiente:
./configure --prefix=$HOME/cualquierpath
make ; make install
Para la ejecucion del nuevo programa instalado es necesario modificar la variable de entorno PATH y LD_LIBRARY_PATH
PATH=$HOME/cualquierpath/bin:$PATH
LD_LIBRARY_PATH=$HOME/cualquierpath/lib miprograma

jueves, 29 de julio de 2010

Colores en printf

Se puede imprimir en la pantalla en colores al usar la funcion printf (....) como se muestra en este ejemplo:

/*********color_printf.c*************/
#include < stdio.h >
int main ()
{
printf ("\033[30m Salida en color: Negro\n");
printf ("\033[31m Salida en color: Rojo\n");
printf ("\033[32m Salida en color: Verde\n");
printf ("\033[33m Salida en color: Amarillo\n");
printf ("\033[34m Salida en color: Azul\n");
return 0;
}
/************************************/
Compilacion:
gcc -Wall -o color_printf color_printf.c
Salida en pantalla:

Salida en color: Negro
Salida en color: Rojo
Salida en color: Verde
Salida en color: Amarillo
Salida en color: Azul

domingo, 25 de julio de 2010

Matar Procesos

Un ejemplo en C de como matar procesos usando para ello la llamada al sistema int system(const char *string); que permite la ejecucion de una orden del interprete de comandos (shell).
Para mas informacion sobre esta funcion en su manual " man system " o si quiere este manual en castellano " man -L es system ".

/********matar_proceso.c********/
#include < stdio.h >
#include < string.h >
#include < stdlib.h >

int main(int argc, char **argv)
{
char *tmpStr;
int i,len,lenB;
char *Kill="kill -9 ";
char *killtotal=NULL;

for (i = 0; i < argc; i++)
{
tmpStr = argv[i];
if ( (strcmp(tmpStr,"-h")==0)||(strcmp(tmpStr,"--help")==0) ||\
(strcmp(tmpStr,"--usage")==0)||(strcmp(tmpStr,"-help")==0) || argc==1)
{
printf("\n");
printf("Usar: matar_proceso --pid IDPROCESO \n");
printf(" --help\n");
printf(" --version Version\n");
printf(" --pid\n");
printf("\n");
exit(0);
}

if((strcmp(tmpStr,"--pid")==0))
{
len=strlen(argv[i+1]);
lenB=strlen(Kill);
killtotal=(char*)malloc(len+lenB);
memset(killtotal,'\0',(len+lenB));
strcpy(killtotal,Kill);
strcat(killtotal,argv[i+1]);
}
if((strcmp(tmpStr,"--version")==0))
{
printf("0.1\n");
exit(0);
}
}
if(killtotal!=NULL)
{
printf("Matando el proceso --> %s\n",killtotal);
system(killtotal);
free(killtotal);
}
return 1;
}


/********************/
Compilacion:
gcc -Wall -O2 -o matar_proceso matar_proceso.c

domingo, 18 de julio de 2010

Modificar la posicion en pantalla de una aplicacion X en ejecucion

Se puede modificar algunos parametros de una aplicacion X en ejecucion para ello solo es necesario conocer la ID de esa aplicacion. El programa xwininfo nos puede ayudar para este proposito (lease su manual --> man xwininfo) su modo de uso es el siguiente.
Al ejecutar en consola el xwininfo este cambiara el cursor a una forma de cruz lo que nos indica que debemos seleccionar la aplicacion X que queremos saber sus propiedades, solo haga crick en la ventana de la aplicacion y xwininfo mostrara una salida como la siguiente:
------------------------
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.

xwininfo: Window id: 0x1a0000d "xterm"

Absolute upper-left X: 5
Absolute upper-left Y: 25
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 501
Height: 316
Depth: 16
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +5+25 -774+25 -774-683 +5-683
-geometry 80x24+1+1

-----------------------
Lo que interesa es la ID de la aplicacion que se encuentra en la siguiente linea
xwininfo: Window id: 0x1a0000d "xterm"
La iD sera ==> 0x1a0000d
Pero para el uso dela aplicacion C que permitira cambiarle sus propiedades es necesario usar un valor decimal ya que lo que muestra por defecto la aplicacion xwininfo es en hexadecimal. Para ello solo hay que agregarle el siguiente parametro:
xwininfo -int
Y mostrara el siguiente resultado
xwininfo: Window id: 27262989 "xterm"
Ya tenemos la informacion necesaria que es la ID de la aplicacion X , lo siguiente es desarrollar el programa en C que por el momento solo permitira cambiar la posicion en pantalla de la ventana ya luego en los siguientes post se le agregara nuevas funcionalidades.

/*---------xcambiargeo.c-----------*/
#include < stdio.h >
#include < stdlib.h >
#include < X11/Xlib.h >
#include < X11/Xutil.h >

int main(int argc,char *argv[])
{
Display *display;
int XwinID,Xwin_nuevaX,Xwin_nuevaY;

if(argc != 4){
fprintf(stderr,"Usar:%s nueva_posicion_x nueva_posicion_y XwinID\n",argv[0]);
return 0;
}

Xwin_nuevaX=atoi(argv[1]);
Xwin_nuevaY=atoi(argv[2]);
XwinID=atoi(argv[3]);

printf("nueva_posicion_x=%d nueva_posicion_y=%d Xaplicacion=%d \n",Xwin_nuevaX,Xwin_nuevaY,XwinID);

display = XOpenDisplay( NULL );
if(display==NULL)
{
printf("Error al abrir display\n");
return 0;
}
XMoveWindow( display,XwinID,Xwin_nuevaX,Xwin_nuevaY);
XCloseDisplay(display);
return 1;
}

/*---------------------------------*/
Compilando:
gcc -o xcambiargeo xcambiargeo.c -lX11
Uso:
./xcambiargeo nueva_posicion_x nueva_posicion_y XwinID
./xcambiargeo 200 300 27262989
Donde:
nueva_posicion_x => Es la posicion x en la pantalla
nueva_posicion_y => Es la posicion y en la pantalla
XwinID => La ID de la aplicacion X o la ventana
Al ejecutar el programa xcambiargeo , se observara que la aplicacion X cambiara de un lugar a otro en la pantalla.

Comparacion de dos archivos

Cuando se quiere comparar dos archivos del mismo tamaño y el resultado de la comparacion grabarlo en algun archivo se puede implementar algun programa en C para realizar esta funcion.
El programa que se muestra acontinuacion permite comparar 2 archivos y la diferencia es decir toda aquella informacion que no esta presente en alguno de estos 2 archivos se graba en otro.
Su modo de uso es el siguiente:
./comparar_archivos archivo_uno_a_comparar archivo_dos_a_comparar archivo_diferencia

"archivo_diferencia" es donde se grabara todos los bits diferentes entre ambos archivos.

/*-----------comparar_archivos.c----------------*/

#include < stdio.h >
#include < stdlib.h >
#include < fcntl.h >
#include < unistd.h >
#include < sys/types.h >
#include < sys/stat.h >
#include < errno.h >


int main(int argc, char *argv[])
{
int fd,fdB,fdC,x,y;
char *fila_uno, *fila_dos,*fila_nueva;
struct stat sbuf;
int z;
char c[1];
char cc[1];

if (argc != 4) {
fprintf(stderr, "usar: programa fila_uno fila_dos fichero_a_crear\n");
exit(1);
}
fila_uno=argv[1];
fila_dos=argv[2];
fila_nueva=argv[3];

if ((fd = open(fila_uno,O_RDONLY )) == -1) {
perror("open fila_uno");
exit(1);
}

if ((fdB = open(fila_dos,O_RDONLY)) == -1) {
perror("open fila_dos");
exit(1);
}

if ((fdC = open(fila_nueva, O_RDWR | O_CREAT)) == -1) {
perror("open fila_nueva");
exit(1);
}

if (stat(fila_uno, &sbuf) == -1) {
perror("stat");
exit(1);
}

for(x=0;x<(sbuf.st_size);x++)
{
z=lseek(fd,x,SEEK_SET);
y=lseek(fdB,x,SEEK_SET);
read(fd,c,1);
read(fdB,cc,1);
if( *c!=*cc)
{
write(fdC,c,1);
}
}
return 0;
}


/*----------------------------------------------*/

Compilar:
gcc -o comparar_archivos comparar_archivos.c