-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelp.c
More file actions
327 lines (275 loc) · 11 KB
/
help.c
File metadata and controls
327 lines (275 loc) · 11 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
// Pablo Portas López pablo.portas
// Pablo Míguez Muiño pablo.miguez.moino
#include <stdio.h>
#include <string.h>
#include "help.h"
#include "color.h"
// Struct Comandos Help o Carolina Herrera (ChatGPT nunca pondría esto)
struct CMDHELP CH[] = {
{"-?", Help_help},
{"authors", Help_authors},
{"pid", Help_pid},
{"ppid", Help_ppid},
{"cd", Help_cd},
{"date", Help_date},
{"historic", Help_historic},
{"open", Help_open},
{"close", Help_close},
{"dup", Help_dup},
{"infosys", Help_infosys},
{"help", Help_help},
{"quit", Help_exit},
{"exit", Help_exit},
{"bye", Help_exit},
{"makefile", Help_makefile},
{"makedir", Help_makedir},
{"listfile", Help_listfile},
{"cwd", Help_cwd},
{"listdir", Help_listdir},
{"reclist", Help_reclist},
{"revlist", Help_revlist},
{"erase", Help_erase},
{"delrec", Help_delrec},
{"allocate", Help_allocate},
{"deallocate", Help_deallocate},
{"memfill", Help_memfill},
{"memdump", Help_memdump},
{"memory", Help_memory},
{"readfile", Help_readfile},
{"writefile", Help_writefile},
{"read", Help_read},
{"write", Help_write},
{"recurse", Help_recurse},
{"getuid", Help_getuid},
{"setuid", Help_setuid},
{"showvar", Help_showvar},
{"changevar", Help_changevar},
{"subsvar", Help_subsvar},
{"environ", Help_environ},
{"fork", Help_fork},
{"search", Help_search},
{"exec", Help_exec},
{"execpri", Help_execpri},
{"fg", Help_fg},
{"fgpri", Help_fgpri},
{"back", Help_back},
{"backpri", Help_backpri},
{"listjobs", Help_listjobs},
{"deljobs", Help_deljobs}
};
void Cmd_help(int NumTrozos, char *trozos[], int argc, char *argv[], char *env[]) {
if (NumTrozos == 0) {
Help_default();
}
if (NumTrozos >= 1) {
for (int i = 0; i < sizeof(CH) / sizeof(CH[0]); i++) {
if (strcmp(trozos[1], CH[i].comando) == 0) {
CH[i].funcion();
return;
}
}
fprintf(stderr, ANSI_COLOR_RED"Comando '%s' no encontrado.\n"ANSI_COLOR_RESET, trozos[1]);
}
}
void Help_authors() {
printf("authors [-n|-l]\tMuestra los nombres y/o logins de los autores\n");
printf("\t-l: solamente los logins.\n\t-n: solamente los nombres.\n");
}
void Help_pid() {
printf("pid [-p]\tMuestra el pid del shell o de su proceso padre\n");
}
void Help_ppid() {
printf("ppid\tMuestra el pid del proceso padre del shell\n");
}
void Help_cd() {
printf("cd [dir]\tCambia (o muestra) el directorio actual del shell\n");
}
void Help_date() {
printf("date [-d|-t]\tMuestra la fecha y/o la hora actual\n");
}
void Help_open() {
printf("open fich m1 m2...\tAbre el fichero fich\n");
printf("\ty lo anade a la lista de ficheros abiertos del shell\n");
printf("\tm1, m2..es el modo de apertura (or bit a bit de los siguientes)\n");
printf("\tcr: O_CREAT\tap: O_APPEND\n\tex: O_EXCL\tro: O_RDONLY\n");
printf("\trw: O_RDWR\two: O_WRONLY\n\ttr: O_TRUNC\n");
}
void Help_close() {
printf("close df\tCierra el descriptor df y elimina el correspondiente fichero de la lista de ficheros abiertos\n");
}
void Help_dup() {
printf("dup df\tDuplica el descriptor de fichero df y anade una nueva entrada a la lista ficheros abiertos\n");
}
void Help_infosys() {
printf("infosys\tMuestra informacion de la maquina donde corre el shell\n");
}
void Help_help() {
printf("help [cmd|-lt|-T|-all]\tMuestra ayuda sobre los comandos\n");
printf("\t-lt: lista topics de ayuda\n\t-T topic: lista comandos sobre ese topic\n"
"\tcmd: info sobre el comando cmd\n\t-all: lista todos los topics con sus comandos\n");
}
void Help_default() {
printf("help [cmd|-lt|-T|-all]\tMuestra ayuda sobre los comandos\n");
printf("Comandos disponibles:\n");
for (int i = 1; i < sizeof(CH) / sizeof(CH[0]); i++) {
printf("%s", CH[i].comando);
if (i < (sizeof(CH) / sizeof(CH[0]) - 1)) printf(", ");
}
printf(".\n");
}
void Help_historic() {
printf("historic [-c|-N|N]\tMuestra (o borra)el historico de comandos\n");
printf("\t-N: muestra los N primeros\n\t-c: borra el historico\n\tN: repite el comando N\n");
}
void Help_exit() {
printf("exit\tTermina la ejecucion del shell\n");
}
void Help_makedir() {
printf("makedir [name]\tCrea un directorio de nombre name\n");
}
void Help_makefile() {
printf("makefile [name]\tCrea un fichero de nombre name\n");
}
void Help_listfile() {
printf("listfile [-long][-link][-acc] name1 name2 ... lista ficheros;\n");
printf("\t-long: listado largo\n\t-acc: acesstime\n\t-link: si es enlace simbolico, el path contenido\n");
}
void Help_cwd() {
printf("cwd\tMuestra el directorio actual del shell\n");
}
void Help_listdir() {
printf("listdir [-hid][-long][-link][-acc] n1 n2 ... lista contenidos de directorios\n");
printf("\t-long: listado largo\n\t-hid: incluye los ficheros ocultos\n\t-acc: acesstime\n"
"\t-link: si es enlace simbolico, el path contenido\n");
}
void Help_reclist() {
printf("reclist [-hid][-long][-link][-acc] n1 n2 ... "
"lista recursivamente contenidos de directorios (subdirs despues)\n");
printf("\t-hid: incluye los ficheros ocultos\n\t-long: listado largo\n"
"\t-acc: acesstime\n\t-link: si es enlace simbolico, el path contenido\n");
}
void Help_revlist() {
printf("revlist [-hid][-long][-link][-acc] n1 n2 ... "
"lista recursivamente contenidos de directorios (subdirs antes)\n");
printf("\t-hid: incluye los ficheros ocultos\n\t-long: listado largo\n"
"\t-acc: acesstime\n\t-link: si es enlace simbolico, el path contenido\n");
}
void Help_erase() {
printf("erase [name1 name2 ..]\tBorra ficheros o directorios vacios\n");
}
void Help_delrec() {
printf("delrec [name1 name2 ..]\tBorra ficheros o directorios no vacios recursivamente\n");
}
void Help_allocate() {
printf("allocate [-malloc|-shared|-createshared|-mmap]... \tAsigna un bloque de memoria\n"
"\t-malloc tam: asigna un bloque malloc de tamano tam\n"
"\t-createshared cl tam: asigna (creando) el bloque de memoria compartida de clave cl y tamano tam\n"
"\t-shared cl: asigna el bloque de memoria compartida (ya existente) de clave cl\n"
"\t-mmap fich perm: mapea el fichero fich, perm son los permisos\n");
}
void Help_deallocate() {
printf("deallocate [-malloc|-shared|-delkey|-mmap|addr].. \tDesasigna un bloque de memoria\n"
"\t-malloc tam: desasigna el bloque malloc de tamano tam\n"
"\t-shared cl: desasigna (desmapea) el bloque de memoria compartida de clave cl\n"
"\t-delkey cl: elimina del sistema (sin desmapear) la clave de memoria cl\n"
"\t-mmap fich: desmapea el fichero mapeado fich\n"
"\taddr: desasigna el bloque de memoria en la direccion addr\n");
}
void Help_memfill() {
printf("memfill addr ch cont \tLlena la memoria con el carácter ch, empezando en la dirección addr, "
"durante cont bytes.\n");
}
void Help_memdump() {
printf("memdump addr cont \tVuelca en pantallas los contenidos (cont bytes) de la posicion de memoria addr\n");
}
void Help_memory() {
printf("memory [-blocks|-funcs|-vars|-all|-pmap] .. \tMuestra muestra detalles de la memoria del proceso\n"
"\t-blocks: los bloques de memoria asignados\n"
"\t-funcs: las direcciones de las funciones\n"
"\t-vars: las direcciones de las variables\n"
"\t-all: todo\n"
"\t-pmap: muestra la salida del comando pmap(o similar)\n");
}
void Help_readfile() {
printf("readfile fiche addr cont \tLee cont bytes desde fich a la direccion addr\n");
}
void Help_writefile() {
printf("writefile [-o] fiche addr cont \tEscribe cont bytes desde la direccion addr a fich (-o sobreescribe)\n");
}
void Help_read() {
printf("read df addr cont \tTransfiere cont bytes del fichero descrito por df a la dirección addr\n");
}
void Help_write() {
printf("write df addr cont \tTransfiere cont bytes desde la dirección addr al fichero descrito por df\n");
}
void Help_recurse() {
printf("recurse [n] \tInvoca a la funcion recursiva n veces\n");
}
void Help_getuid() {
printf("getuid Muestra las credenciales del proceso que ejecuta el shell\n");
}
void Help_setuid() {
printf("setuid [-l] id Cambia las credenciales del proceso que ejecuta el shell\n"
"\tid: establece la credencial al valor numerico id\n"
"\t-l id: establece la credencial a login id\n");
}
void Help_showvar() {
printf("showvar var\tMuestra el valor y las direcciones de la variable de entorno var\n");
}
void Help_changevar() {
printf("changevar [-a|-e|-p] var valor Cambia el valor de una variable de entorno\n"
"\t-a: accede por el tercer arg de main\n"
"\t-e: accede mediante environ\n"
"\t-p: accede mediante putenv\n");
}
void Help_subsvar() {
printf("subsvar [-a|-e] var1 var2 valor Sustituye la variable de entorno var1\n"
"\tcon var2=valor\n"
"\t-a: accede por el tercer arg de main\n"
"\t-e: accede mediante environ\n");
}
void Help_environ() {
printf("environ [-environ|-addr]\tMuestra el entorno del proceso\n"
"\t-environ: accede usando environ (en lugar del tercer arg de main)\n"
"\t-addr: muestra el valor y donde se almacenan environ y el 3er arg main\n");
}
void Help_fork() {
printf("fork\tEl shell hace fork y queda en espera a que su hijo termine\n");
}
void Help_search() {
printf("search [-add|-del|-clear|-path]..\tManipula o muestra la ruta de busqueda del shell (path)\n"
"\t-add dir: aniade dir a la ruta de busqueda(equiv +dir)\n"
"\t-del dir: elimina dir de la ruta de busqueda (equiv -dir)\n"
"\t-clear: vacia la ruta de busqueda\n"
"\t-path: importa el PATH en la ruta de busqueda\n");
}
void Help_exec() {
printf("exec VAR1 VAR2 ..prog args....[@pri]\tEjecuta, sin crear proceso,prog con argumentos\n"
"\ten un entorno que contiene solo las variables VAR1, VAR2...\n");
}
void Help_execpri() {
printf("execpri prio prog args....\tEjecuta, sin crear proceso, prog con argumentos con la "
"prioridad cambiada a prio\n");
}
void Help_fg() {
printf("fg prog args... Crea un proceso que ejecuta en primer plano prog con argumentos\n");
}
void Help_fgpri() {
printf("fgpri prio prog args... Crea un proceso que ejecuta en primer plano prog con "
"argumentos con la prioridad cambiada a prio\n");
}
void Help_back() {
printf("back prog args...\tCrea un proceso que ejecuta en segundo plano prog con argumentos\n");
}
void Help_backpri() {
printf("backpri prio prog args...\tCrea un proceso que ejecuta en segundo plano prog con "
"argumentos con la prioridad cambiada a prio\n");
}
void Help_listjobs() {
printf("listjobs\tLista los procesos en segundo plano\n");
}
void Help_deljobs() {
printf("deljobs [-term][-sig] Elimina los procesos de la lista procesos en sp\n"
"\t-term: los terminados\n"
"\t-sig: los terminados por senal\n");
}