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 - prof neurus

#1
Programación C/C++ / Re: Procesos con fork
27 Mayo 2020, 01:59 AM
RayR a partir de ahora eres mi nuevo amigo  ;-)

Cerré los descriptores en el último proceso hijo y funcionó tal como dijiste.

Muchas gracias.
#2
Programación C/C++ / Procesos con fork
23 Mayo 2020, 02:05 AM
Hola a todos. Estoy viendo el tema de procesos con fork y tuberías con pipe y haciendo un mini shell (o intentando :D). Mi problema se presenta cuando, para decirlo más gráficamente, encuentro un comando o mandato como este:

Código (bash) [Seleccionar]
ls | grep 'patron' | wc -l

Entonces, en este caso son 3 comandos. Tengo un código de prueba pero no esta funacionando. Si alguien pasó por esto o tiene alguna sugerencia bienvenido sea.


int main (int argc, char *argv[]) {
int i,
fd[2], fd0[2],
pid[3];

/* Creación recurso tubería, por el padre */
pipe(fd);

/* 1er hijo, ejecuta ls */
if ( (pid[0]= fork()) == 0) {
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
execlp("/bin/ls", "ls", NULL);
perror("Hijo1: Fallo al hacer exec");
exit (1);
}

pipe(fd0);

/* 2do hijo, ejecuta filtro */
if ( (pid[1]=fork()) == 0) {
dup2(fd[0], STDIN_FILENO);
close(fd[1]);
dup2(fd0[1], STDOUT_FILENO);
close(fd0[0]);
char* arg[] = { "sort", "sort", NULL };
execvp(arg[0], &arg[1]);
//execvp(argv[1], &argv[1]);
perror("Hijo2: Fallo al hacer exec");
exit(1);
}

if((pid[2]=fork()) == 0) {
dup2(fd0[0], STDIN_FILENO);
close(fd0[1]);
char* arg[] = { "wc", "wc", "-l", NULL };
execvp(arg[0], &arg[1]);
perror("Hijo2: Fallo al hacer exec");
exit(1);
}

/* El padre no interviene */
close(fd[0]);
close(fd[1]);
close(fd0[0]);
close(fd0[1]);
/*for (i=0; i<2; i++)
wait(pid[i]);*/
exit (0);
}
#3
Prueba con esto en la cadena de conexión

Provider=Microsoft....
Data Source=\\server\share\folder\myAccessFile.mdb;

Saludos
#4
Me parece que estas leyendo el archivo solo el primer registro.

Debería ser algo como:

leer_registro
Mientras _no_sea_el_final_del_archivo {
    Operar
    leer_registro
}

Espero te ayude.
#5
Prueba lo siguiente:


MSFlexGrid.TextMatrix (MSFlexGrid.RowSel, COL_MATHEMATICS)


Saludos.
#6
Programación C/C++ / Re: Ayuda c++
1 Abril 2019, 20:38 PM
#include <iostream>

using namespace std;

bool isPair (int number) {
    return (number % 2 == 0 ? true : false );
}

bool isOdd (int number) {
    return !isPair(number);
}

bool isPrimeNumber (int number) {
    if (number == 2)
        return true;
       
    if (isOdd(number)) {
        for (int i = 3; i < number; i++) {
            if (number % i == 0)
                return false;
        }
        return true;
    }
    else {
        return false;
    }
}

int numberOfDigits (int number) {
    if (number >= 100 && number < 1000)
        return 3;
    if (number >= 10 && number < 100)
        return 2;
    else
        return 1;
}

int sumOfDigits(const int number) {
    int hundred = 0;
    int ten = 0;
    int unity = 0;
   
    if (numberOfDigits(number) > 3) {
        hundred = number / 100;
        ten = (number % 100) / 10;
    }
    else {
        ten = number / 10;
    }
    unity = number % 10;
   
    return (hundred + ten + unity);
}

void minorPrimeNumbersThat (const int NUMBER, int arrayOfPrimeNumbers[]) {
    int index = 0;
    int sum = 0;
   
    for (int i = 2; i <= NUMBER; i++) {
        if (isPrimeNumber(i)) {
            if (numberOfDigits(i) == 1) {
                arrayOfPrimeNumbers[index++] = i;
            }
            else {
                sum = sumOfDigits(i);
                if (isPrimeNumber(sum)) {
                    if (numberOfDigits(sum) == 1) {
                        arrayOfPrimeNumbers[index++] = i;
                    }
                    else {
                        sum = sumOfDigits(sum);
                        if (isPrimeNumber(sum)) {
                            if (numberOfDigits(sum) == 1)
                                arrayOfPrimeNumbers[index++] = i;
                        }
                    }
                }
            }
        }
    }
}

void printNumbers ( int array[], const int LENGTH_ARRAY) {
    for (int i = 0; i < LENGTH_ARRAY; i++)
        cout << array << ", ";
}

int main()
{
    const int NUMBER = 100;
    const int LENGTH_ARRAY = 25;
   
    int arrayOfPrimeNumbers[LENGTH_ARRAY] = {0};
   
    cout << "Absolute Prime Numbers : ";
    printNumbers (arrayOfPrimeNumbers, LENGTH_ARRAY);
    cout << endl;
   
    minorPrimeNumbersThat (NUMBER, arrayOfPrimeNumbers);

    printNumbers (arrayOfPrimeNumbers, LENGTH_ARRAY);
   
    return 0;
}

Tiene sus limitaciones. Espero que te sirva. Saludos
#7
Esta es la línea 79

        p->g_total = p->g-total + p->total;

por aquí puede estar el fallo, veo p->g_total (guion bajo) y también p->g-total (guion).
#8
El comando WMIC de Windows puede proporcionar información sobre los dispositivos del PC. Por ejemplo:

C:\>wmic MEMORYCHIP get BankLabel,DeviceLocator,Capacity,Speed[Enter]
BankLabel Capacity       DeviceLocator Speed
Bank0       2147483648 M1                 800
Bank1       2147483648 M1                 800

Para ejecutarlo desde un programa de C++ podrías usar ShellExecute (include<windows.h>)

ShellExecute(NULL, "open", " C:/notepad.exe ", NULL, NULL, SW_SHOWDEFAULT);

Esto es sólo una idea. Espero te sirva.