• EnglishSpanishGermanFrenchPolishChinese (Traditional)


EnglishSpanishGermanFrenchPolishChinese (Traditional)

Operating systems, scripting, PowerShell and security

Operating systems, software development, scripting, PowerShell tips, network and security

Menú principal
  • Categorías
  • Cursos
  • Libro de PowerShell
  • Lo mejor
  • Lo último
  • Proyectos
  • Contactar
Ir al contenido

Utilizar zonas de memoria compartida en Linux mediante WSL desde PowerShell

Programa que crea la zona de memoria compartida y almacena un valor

PowerShell
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
$codigo = '
#ifndef _SVID_SOURCE
#define _SVID_SOURCE
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/ipc.h>
 
#endif
typedef struct
{
int num1;
}zona_mem1;
int main (void)
{
 
//Declaración de variables
 
key_t clave1; //clave de acceso a la memoria 1
int shmid1; //identificador de la zona de memoria 1
zona_mem1 *pmem1; //Puntero a la 1 zona de memoria
int comprobar; //variable que me indica la posibilidad de error en la llamada a funciones!
char opc; //indicación de continuación de programa o terminación
 
 
clave1 = ftok(".",''s'');
 
//Creación de zona_mem1
 
shmid1 = shmget(clave1,sizeof(zona_mem1),IPC_CREAT | 0660);
 
if(shmid1 !=-1)
{
printf("Zona de memoria 1 creada OK! con identificador %d \n", shmid1);
}
else
{
printf("ERROR al crear zona de memoria 1 !! \n");
exit(1);
}
 
//He obtenido los recursos que necesito, vinculo el proceso con la zona de memoria!!
 
pmem1 = shmat(shmid1,0,0);
 
if(pmem1 == -1)
{
printf("Error al vincular el proceso a la zona de memoria 1! \n");
exit(1);
}
 
pmem1 -> num1 = ' + $(Read-Host "Valor") + ';
 
//Mantengo en ejecución al programa padre para dar tiempo a leer
do
{
printf("Desea Terminar?? S/N \n");
scanf("%s", &opc);
 
if(opc == "s")
{
 
//Elimino las zonas de memoria!!
 
comprobar = shmctl (shmid1, IPC_RMID,0);
 
if(comprobar == -1)
{
printf("ERROR al eliminar la 1 zona de memoria!! \n");
exit(1);
}
else
{
printf("Zona de memoria 1 eliminada OK !!\n");
}
 
}
 
}while(opc !="s");
}'
 
$codigo | Out-File escritor.c
wsl cat escritor.c
bash -c "iconv escritor.c -f UTF-16 -t UTF-8 > escritors.c"
wsl gcc escritors.c -o escritor
wsl "./escritor"

Zona de memoria creada

Programa que lee un valor en la zona de memoria compartida

PowerShell
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
$codigo = '
#ifndef SOURCE
#define SOURCE
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
 
#endif
 
typedef struct
{
int num1;
}zona_mem1;
int main (void)
{
 
//Declaración de variables
 
key_t clave1; //clave de acceso a la memoria 1
int shmid1; //identificador de la zona de memoria 1
zona_mem1 *pmem1; //Puntero a la 1 zona de memoria
int comprobar; //variable que me indica la posibilidad de error en la llamada a funciones!
char opc; //indicación de continuación de programa o terminación
 
//Algoritmo de programa lector.c
 
clave1 = ftok(".",''s'');
 
//Creación de zona_mem1
 
shmid1 = shmget(clave1,sizeof(zona_mem1),0);
 
if(shmid1 !=-1)
{
printf("Zona de memoria 1 creada OK! con identificador %d \n", shmid1);
}
else
{
printf("ERROR al crear zona de memoria 1 !! \n");
exit(1);
}
 
//He obtenido los recursos que necesito, vinculo el proceso con la zona de memoria!!
 
pmem1 = shmat(shmid1,0,0);
 
if(pmem1 == -1)
{
printf("Error al vincular el proceso a la zona de memoria 1! \n");
exit(1);
}
else
{
printf("%d",pmem1 -> num1);
}
}'
 
$codigo | Out-File lector.c
wsl cat lector.c
bash -c "iconv lector.c -f UTF-16 -t UTF-8 > lectors.c"
wsl gcc lectors.c -o lector
wsl "./lector"

Publicado el día 25 de junio de 2018

CATEGORÍAS

Bash, C, PowerShell

ETIQUETAS

Bash, cat, Continuación, Creación, define _SVID_SOURCE, ftok, ifndef _SVID_SOURCE, IPC_CREAT, Jesús Niño, Jesús Niño Camazón, Linux, Out-File, Read-Host, shmat, shmctl, shmget, Source, stdio.h, stdlib.h, sys/ipc.h, sys/sem.h, sys/shm.h, sys/types.h, typedef struct, WSL

MÁS

  • Aprender PowerShell desde cero
  • Creación y destrucción de hilos en Linux con C
  • Ejercicios de seguridad: práctica sobre virus
  • Tutorial de PowerShell
  • 3. Gestión del hardware en Linux (nivel intermedio)
  • Explicación sobre el uso de funciones que están en DLL del sistema operativo (en PowerShell)