Guia 3
Guia 3
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h> // Librería necesaria para getpid() y getppid()
int main() {
// Variables para almacenar los identificadores de proceso
pid_t id_proceso;
pid_t id_padre;
// Obtener identificadores
id_proceso = getpid(); // Obtiene el PID del proceso actual
id_padre = getppid(); // Obtiene el PID del proceso padre
// Mostrar resultados
printf("Identificador de proceso: %d\n", id_proceso);
printf("Identificador del proceso padre: %d\n", id_padre);
// Nombre: nombreMasId
// Propósito: muestra el nombre y el identificador de un proceso
// Autor: Edwin Carrasco
// FCreación: 27/02/2013
// FModificación: ----
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h> // Necesario para getpid()
// Mostrar resultados
printf("Mi nombre de programa es: %s\n", nombreDePrograma);
printf("Mi identificador de proceso es: %d\n\n", processId);
// Nombre: infoProc
// Propósito: muestra información del usuario y el grupo de usuario que ejecuta un
proceso
// Autor: E. Carrasco
// FCreación: 11/02/2008
// FModificación: 27/02/2013
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h> // Necesario para getuid(), geteuid(), getgid()
int main() {
// Indicar propósito del programa
puts("\n==== ESTE PROGRAMA MUESTRA INFORMACIÓN DEL USUARIO QUE EJECUTA EL
PROCESO ====\n");
// Mostrar resultados
printf("Identificador de usuario: %d\n", getuid());
printf("Identificador de usuario efectivo: %d\n", geteuid());
printf("Identificador del grupo: %d\n", getgid());
printf("Identificador de grupo efectivo: %d\n", getegid());
// Nombre: printHome
// Propósito: imprime el contenido de la variable de entorno HOME
// Autor: E. Carrasco
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <stdlib.h>
int main() {
// Variables
char *home = NULL;
// Nombre: entornoProc
// Propósito: imprime información del entorno de un proceso
// Autor: E. Carrasco
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
extern char **environ; // Variable externa que almacena las variables de entorno
int main() {
// Variables
char **var;
// Nombre: creaProcesoHijo
// Propósito: crea un proceso hijo y muestra su ID
// Autor: E. Carrasco
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
// Variables
pid_t forkReturn;
// Crear proceso
forkReturn = fork();
// Mostrar resultados
if (forkReturn == 0)
printf("Soy el proceso Hijo. Mi PID es %d\n", getpid());
else
printf("Soy el proceso Padre. Mi PID es %d\n", getpid());
// Nombre: creaNHijos
// Propósito: crea N hijos para un proceso
// Autor: E. Carrasco
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
// Variables
pid_t forkReturn;
int i;
int n = 5; // Número de procesos hijo a crear
// Mostrar resultados
printf("%d; El padre del proceso %d es %d \n", i, getpid(), getppid());
PRACTICAS LABORATORIO
// Nombre: jerarquiaProcesos
// Propósito: Crea una jerarquía de procesos en cadena (P1 → P2 → P3 → ... → Pn)
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid;
int nivel = 1; // Indica el nivel del proceso en la jerarquía
// Ejercicio VII.2: Crear un proceso hijo que calcule el cuadrado, el padre calcula
el cubo
void cuadrado_y_cubo() {
int num;
printf("Ingrese un número: ");
scanf("%d", &num);
pid_t pid = fork();
if (pid == 0) {
printf("Hijo: El cuadrado de %d es %d\n", num, num * num);
} else {
wait(NULL);
printf("Padre: El cubo de %d es %d\n", num, num * num * num);
}
}
int main() {
int opcion;
do {
printf("\nSeleccione una opción:\n");
printf("1. Jerarquía de procesos\n");
printf("2. Cuadrado y cubo\n");
printf("3. Esperar hijo\n");
printf("4. Raíz cuadrada\n");
printf("5. Primalidad\n");
printf("0. Salir\n");
printf("Ingrese su elección: ");
scanf("%d", &opcion);
switch (opcion) {
case 1: jerarquia_procesos(); break;
case 2: cuadrado_y_cubo(); break;
case 3: esperar_hijo(); break;
case 4: raiz_cuadrada(); break;
case 5: verificar_primalidad(); break;
}
} while (opcion != 0);
return 0;
}
RESUELTOSS
// Nombre: jerarquiaProcesos
// Propósito: Crea una jerarquía de procesos
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
pid_t pid1, pid2;
// Nombre: calcularCuadradoCubo
// Propósito: Crea un proceso hijo que calcula el cuadrado, mientras el padre
calcula el cubo
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int numero;
printf("Ingrese un número: ");
scanf("%d", &numero);
// Nombre: esperaHijo
// Propósito: Crea un hijo, espera su terminación y muestra su estado
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
int estado;
if (pid == 0) {
printf("Hijo: Mi PID es %d\n", getpid());
} else {
wait(&estado);
printf("Padre: Mi hijo ha terminado con estado %d\n", estado);
}
return 0;
}
// Nombre: calcularRaiz
// Propósito: Usa vfork() para calcular la raíz cuadrada en el hijo y mostrar el
resultado en el padre
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <math.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
double numero, resultado;
printf("Ingrese un número: ");
scanf("%lf", &numero);
// Nombre: verificaPrimo
// Propósito: Hijo genera número aleatorio, padre verifica si es primo
// Autor: Carlos Canal
// FCreación: 11/02/2008
// FModificación: 28/02/2013
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
int numero;
pid_t pid = fork();
if (pid == 0) {
srand(getpid());
numero = rand() % 100 + 1;
printf("Hijo: Número generado %d\n", numero);
exit(numero);
} else {
int estado;
wait(&estado);
numero = WEXITSTATUS(estado);
printf("Padre: El número %d es %s\n", numero, esPrimo(numero) ? "primo" :
"no primo");
}
return 0;
}