Publi

  • Obtener información básica sobre procesos del sistema Linux en C y C++ (parte 3)

    procesos del sistema

    Cuando te independizas y te vas a vivir a un piso o a una casa te preguntas, ¿cómo serán mis vecinos? Por un lado tendremos al típico que deja la basura en la puerta de su casa durante todo el día y esparce olores al resto de los vecinos; o el que desea compartir la música que escucha con los demás y el que cuando entra al edificio y ve que vas a entrar va corriendo al ascensor para no esperarte… Aunque como procesos en ejecución en un entorno Linux muchas veces queremos saber cómo son nuestros vecinos y, al contrario de lo que puede parecer en una comunidad de vecinos, éstos suelen ser mucho más receptivos y dispuestos a darnos información.… Leer artículo completo

  • Concurrencia, POSIX threads y variables compartidas en C


    Hace poco veíamos cómo empezar a hacer nuestros primeros programas multi-thread utilizando POSIX threads. Aunque pronto surge una nueva necesidad: compartir datos entre el proceso principal y el thread que se ha creado, al menos para decirle qué queremos que haga. Para eso podemos utilizar el último argumento de la función pthread_create(), el cuál es un puntero a void, por lo que podemos pasar cualquier tipo de variable. Por ejemplo un número:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>

    void *newtask(void *_number)
    {
      int number = *(int*)_number;
      printf("The number I was asked for: %d\n", number);
      pthread_exit(NULL);
    }

    int main (int argc, char *argv[])
    {
       pthread_t thread;
       int rc;
       int i;
       int number = 99;

       printf ("Main process just started.
    Leer artículo completo
  • Funciones que devuelven arrays

    Al principio, cuando empezaba a programar, yo me quejaba mucho de esa tonta manía de C que no me dejaba devolver arrays como resultado de una función.

    Aunque al final, devolver arrays es una tontería, gasta memoria, gasta tiempo y termina siendo más fácil solucionarlo todo con un puntero.

    Pero bueno, si realmente queremos devolver un array, siempre podemos meterlo dentro de un registro. Probando con una cadena de caracteres:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <string.h>

    typedef struct
    {
        char cadena[1000];
    } t_array;

    t_array devuelvo()
    {
        t_array otroarr;
        printf("\nDirección de cadena: %X\nCadena: %s\n", &otroarr, otroarr.
    Leer artículo completo