Fonction système langage c

Résolu/Fermé
a n - 4 août 2014 à 09:13
 a n - 4 août 2014 à 14:10
Hey,

J'écris actuellement un programme en C sous Linux. J'ai besoin d'une fonction qui rcupère le contenu de la variable PATH. J'ai trouvé la fonction getenv(), où il faut lui spécifier la variable d'environnement en paramètre. Mais elle me rend une chaine de caractère avec les chemin séparer par des deux points. Y a t-il une fonction plus adapaté ou chaque chemin est stocké dans une chaine de caractère, ou alors il faut que je me débrouille pour les décortiquer de cette chaine ?
ET j'aimerais aussi savoir si il existe une fonction permettant de récupérer les droit sur un fichier, avec le groupe auquel il appartient, etc...
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
4 août 2014 à 09:50
Pas de fonctions plus adaptées.
En revanche, tu peux utiliser strtok() pour découper facilement ta chaîne.

Cdlt,
0
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>


struct stat stat_buf;

if ( stat( "File Name", &stat_buf) == -1)
{
exit (1);
}

printf("Permissions: %o\n", stat_buf.st_mode & 0777);

Source : https://answers.yahoo.com/question/index?qid=20071207091917AANbrGo
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 2
4 août 2014 à 10:21
Salut,

Question 1:
De mémoire il faut parser la chaîne retournée, soit avec strtok soit avec strsep:

Question 2:
Tu peux le faire avec 'stat':
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <grp.h>
#include <pwd.h>

int main(int argc, char** argv) {
  const char* filename = "/proc/cpuinfo";
  struct stat buf;

  if(stat(filename, &buf) == -1) exit(1);

  printf("File name: %s\n", filename);
  printf("UID: %s (%d)\n", getpwuid(buf.st_uid)->pw_name, buf.st_uid);
  printf("GID: %s (%d)\n", getgrgid(buf.st_gid)->gr_name, buf.st_gid);
  printf("Mode: %o\n", buf.st_mode & 0777);

  return 0;
}


0
Ok, merci beaucoup !!!
0