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

From Sistemi Operativi
Jump to navigation Jump to search
 
Line 8: Line 8:
  
 
<source lang="c">
 
<source lang="c">
 
 
#include <sys/types.h>
 
#include <sys/types.h>
 
#include <sys/stat.h>
 
#include <sys/stat.h>
Line 20: Line 19:
  
 
int main(void){
 
int main(void){
  int pid;
+
 
  char *path;
+
int pid,max_size=10000;
  path="/proc";
+
char *path, *dove=malloc(max_size);
  struct dirent **namelist;
+
path="/proc";
  int n;
+
size_t size=max_size;
  int c=0;
+
struct dirent **namelist;
  n = scandir(path, &namelist, 0, alphasort);
+
        int n;
 +
int c=0;
 +
        n = scandir(path, &namelist, 0, alphasort);
 
     if (n < 0){
 
     if (n < 0){
 
         perror("scandir");
 
         perror("scandir");
Line 42: Line 43:
 
      
 
      
 
       if (cartella != NULL){
 
       if (cartella != NULL){
 +
      strcat(path,"/exe");
 +
      readlink(path,dove,size);
 
       pid=atoi(namelist[n]->d_name);
 
       pid=atoi(namelist[n]->d_name);
 
       if (pid!=0){
 
       if (pid!=0){
       printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,path);
+
       printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,dove);
 
       }
 
       }
 
       }
 
       }
 
      
 
      
      free(path);
+
      free(path);
 
         } 
 
         } 
 
         printf("%d",c);
 
         printf("%d",c);
 
     }
 
     }
 +
}
  
 
</source>
 
</source>

Latest revision as of 10:13, 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,max_size=10000;
	char *path, *dove=malloc(max_size);
	path="/proc";
	size_t size=max_size;
	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){
       			strcat(path,"/exe");
       			readlink(path,dove,size);
       			pid=atoi(namelist[n]->d_name);
       			if (pid!=0){
       				printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,dove);
       			}
       		}
       		
       		free(path);
        }  	
        printf("%d",c);
    }
}