Difference between revisions of "Esercizio 1 Prova Pratica 25-01-2013"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with " == Soluzione di ababa == Scrivere un programma listexe che fornisca in output l'elenco dei processi attivi nel sistema mettendo in output per ogni processo i...")
 
Line 20: Line 20:
  
 
int main(void){
 
int main(void){
int pid;
+
  int pid;
char *path;
+
  char *path;
path="/proc";
+
  path="/proc";
struct dirent **namelist;
+
  struct dirent **namelist;
    int n;
+
  int n;
int c=0;
+
  int c=0;
    n = scandir(path, &namelist, 0, alphasort);
+
  n = scandir(path, &namelist, 0, alphasort);
 
     if (n < 0){
 
     if (n < 0){
 
         perror("scandir");
 
         perror("scandir");

Revision as of 09:34, 14 April 2015

Soluzione di ababa

Scrivere un programma listexe che fornisca in output l'elenco dei processi attivi nel sistema mettendo in output per ogni processo il pid e il path dell'eseguibile. L'informazione puo' essere trovata scandendo la directory proc, infatti ad ogni processo attivo corrisponde una directory in /proc che ha come nome il numero del processo (ad esempio al processo 9801 corrisponde la directory /proc/9801) e all'interno di queste directory il file exe e' un link simbolico all'eseguibile.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <dirent.h>

int main(void){
   int pid;
   char *path;
   path="/proc";
   struct dirent **namelist;
   int n;
   int c=0;
   n = scandir(path, &namelist, 0, alphasort);
    if (n < 0){
        perror("scandir");
    }
    else{
        while(n--){

        	DIR *cartella;
        	path=malloc(1000);
        	path[0]='\0';
			strcat(path,"/proc/");
       		strcat(path,namelist[n]->d_name);
       		//printf("%s\n",path);
       		cartella=opendir(path);
       		
       		if (cartella != NULL){
       			pid=atoi(namelist[n]->d_name);
       			if (pid!=0){
       				printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,path);
       			}
       		}
       		
       	free(path);
        }  	
        printf("%d",c);
    }