Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ithory

#1
Al final de cada proceso para liberar los recursos hay que usar la llamada al sistema exit();, exit(0) por ejemplo.

Pero solo al final de cada proceso, por ejemplo si creas un proceso con fork();

int valor;
valor=fork();

if(valor == 0) //estamos en el proceso hijo, cuando acabemos de poner el código del hijo haremos un
.....
.....
.....
exit(0)
#2
Ok gracias, era eso que me había hecho un lío con las matrices!
Dejo el código corregido. Gracias.


#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>


int pidh;
int i,j;
int B[2][2];
int pipe1[2];
int enviar[2];
int recibir[2];
int salirhijo=0;
int salirpadre=0;

void leer(){
for(i=0;i<=1;i++){
read(pipe1[0],&recibir[i],sizeof(int));
}
//recibo los datos en el vector de 2 posiciones recibir[2].
printf("Los datos recibidos por la pipe son: %d y %d\n", recibir[0], recibir[1]);
salirhijo=1;
}


int main(){
pipe(pipe1);
pidh=fork();

if(pidh == 0){  //hijo

       signal(SIGUSR1,leer);
       while(salirhijo == 0){
       printf("Hijo esperando...\n");
       sleep(1);
       }

}else{          //padre

sleep(1);

for (i=0;i<2;i++){
for (j=0;j<2;j++){
B[i][j]= rand() % 10;

printf("%d ",B[i][j]);
sleep(1);
}
printf("\n");
}

enviar[0] = B[0][0];
enviar[1] = B[1][1];


printf("Elemento b11 -> %d\n",enviar[0]);
printf("Elemento b22 -> %d\n",enviar[1]);
printf("Estos datos son los que voy a pasar por la pipe\n");
//le voy a enviar 2 elementos al hijo por la pipe, para ello antes los meto en el vector enviar que es de 2 posiciones.

       for(i=0;i<=1;i++){
       write(pipe1[1],&enviar[i],sizeof(int));
       kill(pidh,SIGUSR1);
       sleep(1);

       }
}

}
#3
Hola, ¿es posible pasar más de un int por cada pipe o solo se puede pasar un dato por cada pipe?

Yo tengo 2 valores enteros que quiero enviárselos del proceso padre al hijo mediante una pipe.

Cuando envío los valores los meto en el vector enviar[2] y cuando los recibo los guardo en recibir[2].
Pero al recibirlo y mostrarlo me muestra unos caracteres raros.




#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>


int pidh;
int i,j;
int B[2][2];
int pipe1[2];
int enviar[2];
int recibir[2];
int salirhijo=0;
int salirpadre=0;

void leer(){
for(i=0;i<2;i++){
read(pipe1[0],&recibir[i],sizeof(int));
}
//recibo los datos en el vector de 2 posiciones recibir[2].
printf("Los datos recibidos por la pipe son: %d y %d", recibir[0], recibir[1]);
}


int main(){

pipe(pipe1);

pidh=fork();

if(pidh == 0){  //hijo

        signal(SIGUSR1,leer);
while(salirhijo == 0){
        printf("Hijo esperando...\n");
        sleep(1);
        }

}else{          //padre

sleep(1);

for (i=0;i<3;i++){
for (j=0;j<3;j++){
B[i][j]= rand() % 10;

printf("%d ",B[i][j]);
sleep(1);
}
printf("\n");

}

printf("Elemento b11 -> %d\n",B[0][0]);
printf("Elemento b32 -> %d\n",B[2][1]);

//le voy a enviar 2 elementos al hijo por la pipe, para ello antes los meto en el vector enviar que es de 2 posiciones.

enviar[0] = B[0][0];
enviar[1] = B[2][1];

        for(i=0;i<2;i++){
        write(pipe1[1],&enviar[i],sizeof(int));
        kill(pidh,SIGUSR1);
        sleep(1);

        }
}
}




Saludos y gracias!!
#4
Conseguí montar la particion automáticamente sin la utilidad, simplemente añadiendo la siguiente línea al fichero /etc/fstab:

CitarUUID=69E1EE8ABBB7D98F /media/DATOS ntfs-3g default 0 0



Saludos!
#5
Yo en /etc/fstab tengo lo siguiente:

Citar

 GNU nano 2.2.4                                           Fichero: fstab                                                                                              

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/sda6 during installation
UUID=d0c83f74-ea0f-4ea2-acfc-17728dae80bc /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda7 during installation
UUID=244004cd-fd83-4d86-896d-6dfd1e2f8ae6 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0


Pero ahí no aparece mi partición D (Datos que es nfts)
Solo la de debian sda6 y el swap sda7

¿Qué debo hacer con esto?

Con la utilidad de discos si que aparece todo, pero no sé qué hacer.

Saludos y gracias por las respuestas  :D

#6
Muchas gracias! Funciona perfectamente!

Pero solo lo puedo ejecutar si lo pongo en la carpeta de usuario como bien dices.


Citarsi lo quieres ejecutar en otra localización comprueba los permisos en ella.

Puedes aclarar un poco más esto?
#7
GNU/Linux / No funciona chmod +x para dar permisos
17 Noviembre 2012, 16:44 PM
Hola buenas, estoy tratando de ejecutar varios archivos .sh que me descargo pero en todos me pone lo mismo:
Algo asi como que no tengo permisos para ejecutarlo.
Entonces me voy a la terminal, hago chmod +x nombrearchivo pero no ocurre nada, sigue teniendo solo los permisos de r y w.

Alguien sabe por que no funciona el chmod? tambien he probado con chmod 777 nombredelarchivo pero nada, incluso estando como root (uso debian).

Estoy tratando de instalar el BOINC (una aplicacion para la ayuda a la investigacion extraterrestre, entre otras)
pero no me funciona porque no tengo permisos. (Es un .sh)

Alguien sabe como arreglar esto de que el chmod no funcione??

Saludos!!
#8
GNU/Linux / Re: Error al instalar un tar.gz
10 Noviembre 2012, 16:14 PM
He instalado las librerias que has dicho, pero el error sigue apareciendo cuando hago
bash configure (ya que ./configure no me funciona)

Citarchecking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... configure: error: in `/media/DATOS/Descargas_Linux/reaver-1.4/src':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details.

#9
Programación C/C++ / Re: Continuar estudiando C
8 Noviembre 2012, 23:36 PM
Cuando aprendes las estructuras de control, las funciones y tal, normalmente lo que se aprende después son las estructuras de datos (pilas, colas, listas, arboles...etc).
Pero esto sigue siendo "solo texto", no es nada gráfico si es a lo que te refieres.

@apoeti mas que leer codigos, rompete la cabeza haciendolos tu. Asi es como se aprende.

#10
GNU/Linux / Re: Error al instalar un tar.gz
8 Noviembre 2012, 23:28 PM
¿Puedes decirme cuales son esas librerias y como las puedo instalar?