Autor
|
Tema: [C][?] Listar procesos en GNU/Linux (Leído 1,879 veces)
|
AleBallesta
Desconectado
Mensajes: 65
|
Hola, estoy creando un programa en C que brinde datos sobre el estado actual de un SO GNU/Linux, solo con objetivo educativo . Tengo un problema con la parte que imprime una lista de los procesos en ejecucion. Ya elimine todos los errores y advertencias de compilacion. Aca va el codigo: /* ---- HEADERS ---- */
# include <stdio.h> # include <string.h> # include <unistd.h> # include <stdlib.h>
/* ---- CONSTANTS AND VARIABLES ---- */
// Max PID int max_pid() {
FILE *mp = fopen("/proc/sys/kernel/pid_max", "r"); char max_p[10]; fgets(max_p, 10, mp); int max_pid = atoi(max_p); fclose(mp); return max_pid; }
/* ----SUBPROCESSES ---- */
// Process Listing int ps() { int MAX_PID = max_pid(); int i; for (i=0; i <= MAX_PID; i++) { char istr[10]; sprintf(istr, "%d", i); char filestr[20]; strcpy(filestr, strcat("/proc/", istr)); char filestr1[30]; strcpy(filestr1, strcat(filestr, "/cmdline")); FILE *process1 = fopen(filestr1, "r"); char prout1[100]; fread(prout1, sizeof(char), 100, process1); printf("%s\n", prout1); fclose(process1); char filestr2[30]; strcpy(filestr2, strcat(filestr, "/fd")); FILE *process2 = fopen(filestr2, "r"); char prout2[100]; fread(prout2, sizeof(char), 100, process2); printf("%s\n", prout2); fclose(process2); char filestr3[30]; strcpy(filestr1, strcat(filestr, "/status")); FILE *process3 = fopen(filestr3, "r"); char prout3[100]; fread(prout3, sizeof(char), 100, process3); printf("%s\n\n\n\n\n", prout3); fclose(process3); } return 0; }
int main() { ps(); return 0;
}
Cuando ejecuto el programa, sale "Violacion de Segmento". Tenia entendido que los archivos que intento leer pueden ser leidos como cualquier otro archivo (busque informacion sobre el tema antes de empezar). Agradezco cualquier aporte, solo quiero aprender.
|
|
|
En línea
|
La cantidad de combinaciones de particulas definen la cantidad de universos posibles. A su vez, una combinacion determnada, solo da lugar a una posible cadena de hechos relacionados por causa y efecto. LA CASUALIDAD NO EXISTE, SOLO LA CAUSALIDAD.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Busca la línea donde está la violación de segmento. Esto lo haces colocando pausas, o colocando salidas por pantalla, hasta aislar el problema. Una vez aislada la linea, mira qué variables utiliza y busca sus definiciones. Mira que estén todas bien inicializadas (en caso de que sea necesario).
Si no encuentras nada, di qué linea es.
|
|
|
En línea
|
|
|
|
AleBallesta
Desconectado
Mensajes: 65
|
La violacion de segmento esta en la linea 43: strcpy(filestr, strcat("/proc/", istr));
Como puede suceder eso en una operacion tan simple como en una union de cadenas? Gracias por responder.
|
|
|
En línea
|
La cantidad de combinaciones de particulas definen la cantidad de universos posibles. A su vez, una combinacion determnada, solo da lugar a una posible cadena de hechos relacionados por causa y efecto. LA CASUALIDAD NO EXISTE, SOLO LA CAUSALIDAD.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
strcat concatena a la cadena A la cadena B. En esa operación, tu cadena A es una constante. Lo mejor es que hagas: char filestr[20] = "/proc/";
Y revisa de paso el resto de concatenaciones.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Listar procesos y realizar cosas con los procesos
Programación Visual Basic
|
sebas369
|
2
|
3,388
|
14 Julio 2006, 16:08 pm
por sebas369
|
|
|
[VB.NET] Listar procesos activos en un Listbox.
.NET (C#, VB.NET, ASP)
|
kub0x
|
2
|
5,111
|
26 Agosto 2011, 04:09 am
por kub0x
|
|
|
Listar Procesos
Programación Visual Basic
|
calk9
|
4
|
2,822
|
20 Diciembre 2011, 00:52 am
por calk9
|
|
|
Listar puertos en uso por procesos
Programación Visual Basic
|
vvictoristudio
|
2
|
2,126
|
18 Diciembre 2013, 10:34 am
por Mad Antrax
|
|
|
Listar procesos en listview.
.NET (C#, VB.NET, ASP)
|
nolasco281
|
4
|
3,087
|
20 Junio 2015, 09:28 am
por nolasco281
|
|