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...")
 
 
(One intermediate revision by the same user not shown)
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;
 +
char *path, *dove=malloc(max_size);
 
path="/proc";
 
path="/proc";
struct dirent **namelist;
+
size_t size=max_size;
    int n;
+
struct dirent **namelist;
int c=0;
+
        int n;
    n = scandir(path, &namelist, 0, alphasort);
+
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);
    }
}