All pastes #53523 Raw Edit

Something

public text v1 · immutable
#53523 ·published 2006-05-04 13:19 UTC
rendered paste body
unsigned int getpid(const char *process) {
  int target_link;
  DIR *dir_p;
  DIR *dir_proc;
  struct dirent *dir_entry_p;
  struct dirent *dir_proc_p;
  char dir_name[35];
  char target_name[235];
  char exe_link[235];

  dir_p = opendir( "/proc/" ); /* Abre o /proc */

  /* le os dirs do /proc */
  while((dir_entry_p = readdir(dir_p)) != NULL) {

    /* conta se so tem numeros no nome do dir */
    if (strspn(dir_entry_p->d_name, "0123456789") == strlen(dir_entry_p->d_name)) {

      sprintf(dir_name, "/proc/%s/", dir_entry_p->d_name);

       /* Open that numbered directory */
      if ((dir_proc = opendir(dir_name))) {
         /* Reading its entries */
        while ((dir_proc_p = readdir(dir_proc))) {
           /* Check for that exe link file */
          if (strncmp(dir_proc_p->d_name, "exe", 3) == 0)  {

            sprintf(exe_link, "%s%s", dir_name, dir_proc_p->d_name);

            /* Getting the target of the exe ie to which binary it points to */
            target_link = readlink(exe_link, target_name, sizeof(target_name)); 
            target_name[target_link] = '\0';
            
             /* Searching for process name in the target name */
            if (strstr( target_name, process ) != NULL) {
              closedir(dir_p);
              return atoi(dir_entry_p->d_name);
            }
            strncpy(exe_link ,"", 1);
          }
        }
      }
    }
  }
  closedir(dir_p);
  return 0;
}