elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Scripting / AYUDA PORFAVOR!! en: 28 Febrero 2023, 18:19 pm
Buenas, por favor alguien me puede ayudar a saber detalladamente qué es lo que hace este comando que paso a continuación, es que no lo se, me hago mucho lío. Se los agradecería

$ grep g03 < fichero | sed 's/-/ /g' | cut -d " " -f3 > nuevoFichero

el archivo llamado fichero contiene lo que aparece a continuación ($ cat fichero):
230221-g03-entrada
230119-g03-entrada
230109-g02-salida
221115-g01-entrada
<C-D>

la salida de este conjunto de comandos registrada en el fichero 'nuevoFichero' es:
entrada
entrada
2  Programación / Programación C/C++ / AYUDA POR FAVOR en: 29 Diciembre 2022, 00:00 am
Hola, necesito ayuda para resolver un problema de mi código.
No sé donde está el fallo ya que a la hora de ejecutar (./padre /home/usuario/*) me devuelve solamente barras, cuando debe devolverme los archivos y directorios que tengo en la ruta. Por ejemplo; en mi ruta /home/usuario/* tengo 17 archivos, cuando ejecuto mi código me devuelve 17 barras (/////////////////) y lo que necesito que me devuelva es el nombre de cada archivo o directorio de esa ruta.
Por favor si alguien me puede ayudar, le estaría sumamente agradecida!!!.

A continuacion paso el código del proceso padre y del proceso hijo (ambos códigos son necesarios), el modo de ejecucion debe ser de la siguiente manera:
gcc hijo.c -o hijo
gcc padre.c -o padre
./padre /home/usuario/*

CODIGO DE PADRE

Código:
/*fd[0] = se encarga de la lectura 
fd[1] = se encarga de la escritura
fd[2] = hace ambas cosas, lectura/escritura*/

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

#include <sys/stat.h>
#include <fcntl.h>

#define NUM_HIJOS 10//El numero de hijos debe ser tantos como numero de parametros haya
#define NOMBREHIJO "./hijo"
#define MAXBUFFER 256 //Tamaño del buffer lectura/escritura

void FinalizarProcesos();

void Manejador(int num);

pid_t pids[NUM_HIJOS];
int longitud_pid=0;//logitud del pid

int main(int argc, char *argv[]){
int fd[2];//Descriptores de la tuberia de comunicacion
int i, j; //Para los bucles
int pid; //PID de un proceso hijo

int status; //terminacion proceso hijo
char buffer[MAXBUFFER];//buffer de lectura/escritura
int num_caracteres;


/*Tratamiento de la linea de ordenes*/
if(argc < 2){// < 2
fprintf(stderr, "Error en el numero de argumentos\n");
exit(EXIT_FAILURE);
}

/*Tratamiento de la señal*/
if(signal(SIGINT, Manejador)== SIG_ERR){
fprintf(stderr, "Error en la manipulacion de la señal\n");
exit(EXIT_FAILURE);
}

/*Creacion de la tubería de comunicacion*/
if(pipe(fd) != 0){
fprintf(stderr, "Error en la creacion de la tuberia\n");
return EXIT_FAILURE;
}

//CREACION DE LOS PROCESOS HIJOS
for(i=1; i<argc; i++){//NUM_HIJOS
switch(pids[i-1]=fork()){ //Se guarda el pid en la tabla de procesos y con pids[i-1]se salta el ./padre
case -1:
fprintf(stderr, "Error en la creacion del proceso hijo\n");
FinalizarProcesos();
break;
case 0: //Ejecucuion por el proceso hijo

            /*Redireccion de la entrada estandar al archivo*/
            if ((fd[0] = open(argv[1], O_RDONLY)) == -1){
                fprintf(stderr, "Error en la apertura del archivo de datos\n");
                return EXIT_FAILURE;
            }
close(1);
if(dup(fd[1]) != 1){// Asignacion de salida estandar
fprintf(stderr, "Error en la duplicacion del descriptor\n");
return EXIT_FAILURE;
}
if(execl(NOMBREHIJO, NOMBREHIJO, argv[i], NULL) == -1){ //argv[1]
fprintf(stderr, "Error en la ejecucion del proceso hijo\n");
    perror("execl");
exit(EXIT_FAILURE);
}
break;
default: /*Ejecucion por el proceso padre*/
//close(fd[1]);// debe de ir fuera del for
break;
}
longitud_pid++; //Para tener un control de cuantas cosas hay dentro del pids, por ejemplo hola (longitud=1) mundo (longitud=2)
}
close(fd[1]);


/*Espera a la finalizacion de los procesos hijos*/
for(i=1; i<NUM_HIJOS; i++){
pid=wait(NULL);
//leer un caracter de entrada de la tuberia fd[0] (READ)
if ((num_caracteres = read(fd[0], buffer, MAXBUFFER)) > 0){
    printf("%.*s", num_caracteres, buffer);//leerá la tuberia y la escribirá en la salida estandar
}
}
printf("[Proceso padre] finaliza\n");
return EXIT_SUCCESS;
}

/*FinalizarProcesos: Termina todos los procesos hijos vivos*/
void FinalizarProcesos(void){
int i;
for(i=0; i<longitud_pid; i++){ //Logitud_pid es porque los pids leidos van a tener valor
if(kill(pids[i], SIGTERM) == -1){
fprintf(stderr, "Error al enviar una señal\n");
exit(EXIT_FAILURE);
}

}
}

/*Manejador: Manejador de señal*/
void Manejador(int num){
FinalizarProcesos();
printf("[Proceso padre] finaliza\n");
exit(EXIT_SUCCESS);
}


CODIGO DE HIJO

Código:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char *argv[]){

/*Tratamiento de la linea de ordenes*/
if(argc != 2){
fprintf(stderr, "Error en el numero de argumentos\n");
return EXIT_FAILURE;
}

//Para las señales
sleep(10); //El hijo se ejecuta se duerme 10 seg y va ha inprimir el 1º caracter por tubería
//Ve como se matan los procesos hijos.

putchar(argv[1][0]);  //El primer caracter en la salida estandar y escribe en la tuberia, imprime el primer caracter
return EXIT_SUCCESS;

}

3  Programación / Scripting / Necesito Ayuda POR FAVOR!! en: 2 Noviembre 2022, 23:59 pm
Hola, buenas. He realizado el siguiente código en bash, pero no sé muy bien como puedo hacer lo siguiente:
- No sé hacer, que el tamaño devuelto en la ejecución se exprese en bloques de 1024bytes=1KB (Funcion computingSize())


Código:
#!/bin/bash
shopt -s dotglob #recuperar ocultos

##################################muestra error y fuerza salida#####################################
function mostrarError () {
    echo "ERROR. Modo de empleo: midu [opciones] [camino1 camino2 caminos3 ...]"
    exit 1
}

########################################Funcion recursiva###########################################
tam_parcial=0 #variable global

function computingSize(){
    #Guardamos las opciones en variables locales
    local opcion_d
    local opcion_s   
    local opcion_exlude
    local ruta=$4

    #si el camino es un archivo regular la unica opcion a tener en cuenta es --exclude
    if [ -f $ruta ]; then
        #se calcula el tamano (aux). Vale tambien con wc -c (tamano en bytes es valido)
        #stat con opciones adecuadas o en KB con ls -s
        tam_parcial=$aux
    fi

    #si el camino es un directorio
    if [ -d $ruta ]; then
        local nodo
        #lista todo lo que tiene la ruta archivos y directorios "ls" y los va ha recorrer uno a uno por nodo
        for nodo in $ruta/*; do
            #si es directorio
            if [[ -d $nodo ]] ; then

                #Guardar el valor de tam_parcial en variable local (e.j: temp)
                temp=$tam_parcial
                #resetear antes de la llamada a funcion recursiva
                tam_parcial=0

                computingSize $opcion_d $opcion_s $opcion_exlude $nodo
                #imprimir $tam_parcial
                #print(tam_parcial)

                #se recupera/restaura el valor anterior de tam_parcial y se acumula con lo obtenido
                #en la llamada recursiva
                tam_parcial <- $(expr $tam_parcial + $temp)

            #si es archivo regular
            elif [[ -f $nodo ]]; then
                #Calculando con wc -c
                tam_archivo=  wc -c "$nodo"

                #acumulamos
                tam_parcial=$(expr $tam_parcial + $tam_archivo)

           
            fi
        done
    fi
}

############################Comprobacion de errores#########################################
OPCION=""
CONTADOR=1 #Empezamos en el argumento 1
OPCION_D=99999;
OPCION_S=99999;
OPCION_EXCLU=99999;
for i in $@ ; do
    case $i in
         "-s" | "-d" | "--exclude")
                #Error si ya se ha recogido uno o mas caminos
                if [ $RUTAS ] ; then
                    mostrarError
                fi
                case $i in
                    "-d" | "--exclude")
                        #Error si -d o --exclude es el utimo param (y no tienen ningun valor detras)
                        if [ $CONTADOR -eq $# ]; then
                            mostrarError
                        fi
                        OPCION=$i
                        ;;
                    "-s")
                        #La opcion -s no tiene ningun param detras (Ruta)
                        OPCION_S=1
                        ;;
                    esac
                ;;
          *)
                ##Recuperamos los parametros para la opcion y/o la ruta##                       
                case $OPCION in
                    #Deberia recoger ahora el param de -d
                    "-d")
                        NIVELES=`expr $i / 1` #Paso a entero
                        #Si no hay niveles
                        if [ ! $NIVELES ] ; then
                            mostrarError
                        fi
                        #si los niveles son negativos
                        if [ $NIVELES -lt 0 ] ; then
                            mostrarError
                        fi
                        OPCION_D=$NIVELES                                                       
                        ;;                   

                    #Param de --exclude
                    "--exclude")
                        OPCION_EXCLU=$i                       
                        ;;

                    "") #Para recoger el camino. $i representa un camino dse anade al array vector                       
                        RUTAS+=("$i")
                        ;;
                esac
                #resetea al coger la opcion adecuada
                OPCION=""
                ;;           
    esac
    CONTADOR=$(expr $CONTADOR + 1)
done

#####################################################################
# Tratar cuando no se especifica camino
if [ ! $RUTAS ] ; then
     computingSize $OPCION_D $OPCION_S $OPCION_EXCLU "."
else
    for i in "${RUTAS[@]}"; do
        # Llamar a computingSize
        computingSize $OPCION_D $OPCION_S $OPCION_EXCLU $i
    done
fi

4  Programación / Scripting / URGENTE PORFAVOR!! en: 31 Octubre 2022, 18:14 pm
Buenas, necesito ayuda URGENTE en un código de bash que he realizado, mi duda es en la función computingSize() del código que paso a continuación ya que la función debe de calcular el tamaño en bytes o KBytes Recorriendo de forma recursiva los ficheros regulares y subdirectorios, evaluando las opciones especificadas, haciendo la función del comando du (ejemplo: du -d 0 --exclude=PATRON /RUTA).

CÓDIGO:
Código:
#!/bin/bash
shopt -s dotglob #recuperar ocultos
[b]
function computingSize(){
    #Guardamos las opciones en variables locales
    local opcion_d
    local opcion_s  
    local opcion_exlude
    local ruta=$4

    #si el camino es un archivo regular la unica opcion a tener en cuenta es --exclude
    if [ -f $ruta ]; then
        #se calcula el tamano (aux). Vale tambien con wc -c (tamano en bytes es valido)
        #stat con opciones adecuadas o en KB con ls -s
        tam_parcial=$aux
    fi

    #si el camino es un directorio
    if [-d $ruta]; then
        local nodo
        #lista todo lo que tiene la ruta archivos y directorios "ls" y los va ha recorrer uno a uno por nodo
        for nodo in $ruta/*; do
            #si es directorio
            if [-d $nodo]; then

                #Guardar el valor de tam_parcial en variable local (e.j: temp)
                temp=$tam_parcial
                #resetear antes de la llamada a funcion recursiva
                tam_parcial=0

                computingSize $opcion_d $opcion_s $opcion_exlude $nodo
                #imprimir $tam_parcial
                print(tam_parcial)

                #se recupera/restaura el valor anterior de tam_parcial y se acumula con lo obtenido
                #en la llamada recursiva
                tam_parcial <- $(expr $tam_parcial + $temp)

            #si es archivo regular
            elif [-f $nodo]; then
                #Calculando con wc -c
                tam_archivo

                #acumulamos
                tam_parcial=$(expr $tam_parcial + $tam_archivo)

            
            fi
        done
    fi
}
[/b]
5  Programación / Scripting / [MOD] código de bash computingSize() en: 25 Octubre 2022, 18:47 pm
Buenas, necesito ayuda URGENTE en un código de bash que he realizado, mi duda es en la función computingSize() del código que paso a continuación ya que la función debe de calcular el tamaño en bytes o KBytes Recorriendo de forma recursiva los ficheros regulares y subdirectorios, evaluando las opciones especificadas, haciendo la función del comando du (ejemplo: du -d 0 --exclude=PATRON /RUTA).

CÓDIGO:
Código:
#!/bin/bash
shopt -s dotglob #recuperar ocultos

##################################muestra error y fuerza salida#####################################
function mostrarError () {
    echo "ERROR. Modo de empleo: midu [opciones] [camino1 camino2 caminos3 ...]"
    exit 1
}

########################################Funcion recursiva###########################################
tam_parcial=0 #variable global

function computingSize(){
    #Guardamos las opciones en variables locales
    local opcion_d
    local opcion_s  
    local opcion_exlude
    local ruta=$4

    #si el camino es un archivo regular la unica opcion a tener en cuenta es --exclude
    if [ -f $ruta ]; then
        #se calcula el tamano (aux). Vale tambien con wc -c (tamano en bytes es valido)
        #stat con opciones adecuadas o en KB con ls -s
        tam_parcial=$aux
    fi

    #si el camino es un directorio
    if [-d $ruta]; then
        local nodo
        #lista todo lo que tiene la ruta archivos y directorios "ls" y los va ha recorrer uno a uno por nodo
        for nodo in $ruta/*; do
            #si es directorio
            if [-d $nodo]; then

                #Guardar el valor de tam_parcial en variable local (e.j: temp)
                temp=$tam_parcial
                #resetear antes de la llamada a funcion recursiva
                tam_parcial=0

                computingSize $opcion_d $opcion_s $opcion_exlude $nodo
                #imprimir $tam_parcial
                print(tam_parcial)

                #se recupera/restaura el valor anterior de tam_parcial y se acumula con lo obtenido
                #en la llamada recursiva
                tam_parcial <- $(expr $tam_parcial + $temp)

            #si es archivo regular
            elif [-f $nodo]; then
                #Calculando con wc -c
                tam_archivo

                #acumulamos
                tam_parcial=$(expr $tam_parcial + $tam_archivo)

            
            fi
        done
    fi
}

############################Comprobacion de errores#########################################
OPCION=""
CONTADOR=1 #Empezamos en el argumento 1
OPCION_D=99999;
OPCION_S=99999;
OPCION_EXCLU=99999;
for i in $@ ; do
    case $i in
         "-s" | "-d" | "--exclude")
                #Error si ya se ha recogido uno o mas caminos
                if [ $RUTAS ] ; then
                    mostrarError
                fi
                case $i in
                    "-d" | "--exclude")
                        #Error si -d o --exclude es el utimo param (y no tienen ningun valor detras)
                        if[$CONTADOR -eq $#]; then
                            mostrarError
                        fi
                        OPCION=$i
                        ;;
                    "-s")
                        #La opcion -s no tiene ningun param detras (Ruta)
                        OPCION_S=1
                        ;;
                    esac
                ;;
          *)
                ##Recuperamos los parametros para la opcion y/o la ruta##                      
                case $OPCION in
                    #Deberia recoger ahora el param de -d
                    "-d")
                        NIVELES=`expr $i / 1` #Paso a entero
                        #Si no hay niveles
                        if [ ! $NIVELES ] ; then
                            mostrarError
                        fi
                        #si los niveles son negativos
                        if [ $NIVELES -lt 0 ] ; then
                            mostrarError
                        fi
                        OPCION_D=$NIVELES                                                      
                        ;;                    

                    #Param de --exclude
                    "--exclude")
                        OPCION_EXCLU=$i                        
                        ;;

                    "") #Para recoger el camino. $i representa un camino dse anade al array vector                      
                        RUTAS+=("$i")
                        ;;
                esac
                #resetea al coger la opcion adecuada
                OPCION=""
                ;;            
    esac
    CONTADOR=$(expr $CONTADOR + 1)
done

#####################################################################
# Tratar cuando no se especifica camino
if [ ! $RUTAS ] ; then
     computingSize $OPCION_D $OPCION_S $OPCION_EXCLU "."
else
    for i in "${RUTAS[@]}"; do
        # Llamar a computingSize
        computingSize $OPCION_D $OPCION_S $OPCION_EXCLU $i
    done
fi
6  Programación / Java / Código de clases UML en: 17 Octubre 2022, 19:11 pm
Buenas tardes!, tengo ciertas dudas a la hora de generar el código en java de unas clases UML y es que no sé muy bien los métodos que tienen que llevar tampoco sé si las relaciones entre clases hay que ponerlas y cómo se pueden poner.

Si me pueden ayudar a saber como puedo generar los métodos de la clase entities->Profesor y entities->CursoPropio

Agradecería mucho si me ayudan a resolver estas lagunas que tengo. Soy nueva programando y no se muy bien como se hace.

Dejo un enlace a un video donde aparecen las clases UML que tengo que generar su código y sobre las que tengo duda:


El código que he hecho de la clase CursoPropio es el siguiente, pero no sé si me faltan o no métodos:
Código:
package negocio.entities;

import java.util.Date;
import java.util.Vector;
import negocio.entities.Matricula;
import negocio.entities.Materia;
import persistencia.CursoPropioDAO;

public class CursoPropio {
private String _id;
private String _nombre;
private int _eCTS;
private Date _fechaInicio;
private Date _fechaFin;
private double _tasaMatricula;
private int _edicion;
public Vector<Matricula> _matriculas = new Vector<Matricula>();
public Centro _centro;
public ProfesorUCLM _director;
public ProfesorUCLM _secretario;
public Vector<Materia> _materias = new Vector<Materia>();
public EstadoCurso _estado;
public TipoCurso _tipo;
public CursoPropioDAO _cursoPropioDao;
}
7  Programación / Java / SOCKETS UDP Ayuda!! en: 15 Mayo 2022, 14:21 pm
Buenas, estoy haciendo un programa en java Cliente y Servidor con sockets UDP. El cliente y el servidor se deben de enviar mutuamente ( intercambiando mensajes ) la hora actual en el momento de ejecucion, y tambien deben de imprimir el número segundos transcurridos en el intercambio de mensajes(ESTO ULTIMO NO TENGO NI IDEA DE COMO LO PUEDO HACER). He hecho el codigo del intercambio de hora pero me da error. Si alguien porfavor me pudiese ayudar a saber donde esta el fallo y tambien si me puede ayudar a saber como puedo hallar los segundos transcurridos, estaría muy agradecida.

Codigo Cliente:

Código:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ClienteUDPHora {

public static void main(String[] args) {

try {
DatagramSocket socketUDP = new DatagramSocket();
byte[] mensaje = args[0].getBytes();
InetAddress hostServidor = InetAddress.getByName(args[1]);
int puertoServidor = 5000;

//Construimos un datagrama para enviar el mensaje al Servidor
DatagramPacket peticion =
new DatagramPacket(mensaje, args[0].length(),
hostServidor, puertoServidor);
//Enviamos el datagrama
            SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha
            System.out.println("Fecha y hora enviadas al servidor: "+dateFormat.format(new Date()));

socketUDP.send(peticion);


//Construimos el datagrama que contendra la respuesta
byte[] buffer = new byte[1000];
DatagramPacket respuesta = new DatagramPacket(buffer, buffer.length);

socketUDP.receive(respuesta);

//Enviamos la respuesta del servidor a la salida estandar
System.out.println("Respuesta: "+ new String(respuesta.getData()));


//Cerramos el soccket
socketUDP.close();


} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


Codigo Servidor:

Código:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ServidorUDPHora {

public static void main(String[] args) {

try {
@SuppressWarnings("resource")
DatagramSocket socketUDP = new DatagramSocket(5000);
byte[] buffer = new byte[1000];

while(true) {
//Construimos el DatagramPacket para recibir peticiones
DatagramPacket peticion = new DatagramPacket(buffer, buffer.length);

//Leemos una peticion del DatagramSocket
socketUDP.receive(peticion);

System.out.println("Datagrama recibido del host: "+ peticion.getAddress());
System.out.println(" desde el puerto remoto: "+ peticion.getPort());

//Construimos el DatagramPacket para enviar la respuesta
DatagramPacket respuesta = new DatagramPacket(peticion.getData(), peticion.getLength(),
peticion.getAddress(), peticion.getPort());
           
SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha
            System.out.println("Fecha y hora enviadas al cliente: "+dateFormat.format(new Date()));

//Enviamos la respuesta, que es un eco
socketUDP.send(respuesta);
}

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

8  Programación / Java / Re: SOCKETS AYUDA URGENTE PORFAVOR!!!! en: 9 Mayo 2022, 12:10 pm
GRACIAS!!
9  Programación / Java / Re: SOCKETS AYUDA URGENTE PORFAVOR!!!! en: 8 Mayo 2022, 20:40 pm
Es una especificacion diferente, además si que me ayudaron y respondieron, lo agradezco mucho la verdad! .
Si alguien me pudiese ayudar con este dilema porfavor!
10  Programación / Java / Re: AYUDA CON Inversiones de 1 en: 8 Mayo 2022, 20:35 pm
Gracias!! :D, voy a probar lo que dices, para ver si me funciona
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines