begin process at 2012 05 30 08:07:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Système

 > 

Autre

 > 

UNIX C Language


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

UNIX C Language

jeudi 17 novembre 2011 à 09:46:11 | UNIX C Language

RMEU


Bonjour,

Quelqu'un pourrait-il me donner le nom d'une fonction C qui prend un nom de fichier comme paramètre et retourne le type de fichier? En bref, l'équivalent de la commande shell file.
Pas la fonction stat car on ne peut pas savoir si le fichier compressé ou pas or c'est cette information qui m'intéresse.

Merci d'avance.

RMEU
jeudi 17 novembre 2011 à 10:46:57 | Re : UNIX C Language

Renfield

Administrateur CodeS-SourceS

pourquoi ne pas invoquer ta commande shell ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
jeudi 17 novembre 2011 à 10:50:37 | Re : UNIX C Language

RMEU

Car je préfère ne pas sortir du programme. Sinon, je peux exécuter la commande file à partir du programme, mais comment récupérer l'output de la command?


RMEU
jeudi 17 novembre 2011 à 11:00:35 | Re : UNIX C Language

coucou747

Administrateur CodeS-SourceS
Bonjour,

avec de la redirection de flux (voir la fonction dup2) et les fonctions associées à execve, tu peux faire un truc du genre :

duppliquer stdout
forker
dans le fils, lancer ta commande
dans le père, lire le stdout du fils

Les exemples d'utilisations de execve sont nombreux.

Cordialement,

Maxime
jeudi 17 novembre 2011 à 11:16:25 | Re : UNIX C Language

RMEU


Merci pour la réponse, je vais essayer cette solution

RMEU
vendredi 18 novembre 2011 à 15:35:08 | Re : UNIX C Language

katsankat

Membre Club
Réponse acceptée !
popen() est probablement le plus simple à mettre en oeuvre pour lancer une commande et récupérer la sortie standard.

Code C/C++ :
  FILE *in;
  char buff[512];
 
  if (!(in = popen("ls -la", "r"))) {
    return;
  }
 
  while (fgets(buff, sizeof(buff), in) != NULL ) {
    printf("Output: %s", buff);
  }

  pclose(in);

vendredi 18 novembre 2011 à 17:04:29 | Re : UNIX C Language

RMEU


Bonjour Katsankat,

Ceci me semble être la meilleure solution à mon problème.

Bon week-end

RMEU
samedi 19 novembre 2011 à 21:03:28 | Re : UNIX C Language

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Pour info, le man est assez précis sur ce que fait file, elle ne semble pas excessivement dur recoder.

1/ D'abord stat.
2/ Puis il cherche des "nombres magiques" répertoriés dans /usr/share/magic.
3/ Si c'est un fichier ASCII, il cherche des mots contenus dans names.h.

Les tests de systèmes de fichiers sont basés sur l'examen de la sortie de l'appel-système stat(2) . Le programme vérifie si le fichier est vide, ou s'il s'agit d'un certain type de fichier spéciaux. Tous les types de fichiers connus appropriés présents sur votre système (sockets, liens symboliques ou tubes nommés (FIFOs) sur les systèmes qui les implémentent) sont reconnus lorsqu'ils sont définis dans le fichier d'entête du système sys/stat.h.

Les tests de nombres magiques sont utilisés pour vérifier des fichiers contenant des données dans des formats fixes particuliers. L'exemple type est un fichier binaire exécutable (programme compilé) a.out, dont le format est défini dans a.out.h, et peut-être aussi dans exec.h dans le répertoire d'inclusion standard. Ces fichiers contiennent un ``nombre magique'' qui indique au système d'exploitation UNIX que le fichier est un binaire exécutable, et qui donne le type précis parmi ces multiples types possibles. Le concept de ``nombre magique'' a été appliqué par extension aux fichiers de données. Tout fichier contenant un identificateur invariable a une place fixe dans le fichier peut d'habitude être décrit de cette façon. L'information sur ces fichiers est lue à partir du fichier magique /usr/share/magic.

Si un argument semble être un fichier ASCII, file essaie de deviner le langage dans lequel il a été ecrit. Les tests de langage recherchent des chaînes de caractères particulières (cf names.h) qui peuvent apparaître n'importe où dans les premiers blocs d'un fichier. Par exemple, le mot-clé .br indique que le fichier est probablement un fichier d'entrée troff(1) , comme le mot-clé struct indique un programme C. Ces tests sont moins fiables que les deux autres types de tests, et donc ils sont pratiqués en dernier lieu. Les routines de tests de langage testent également quelques types divers (comme les archives tar(1) ), et déterminent si un fichier de type inconnu doit être étiqueté `ascii text' (texte ascii) ou `data' (données).

samedi 19 novembre 2011 à 22:08:00 | Re : UNIX C Language

katsankat

Membre Club
Effectivement j'ai regardé la source de file.c avant de répondre. La meilleure solution est de faire appel à ce binaire. Une tâche, un programme c'est ça l'esprit UNIX. Donc popen() ou fork mais on peut ré-écrire la roue et l'adapter en cours de chemin, chacun sa voie chacun est libre surtout s'il a le temps de l'être.
lundi 21 novembre 2011 à 08:26:07 | Re : UNIX C Language

RMEU


Bonjour,

Merci pout toutes ces réponses. J'ai opté pour la solution proposée par katsankat. Elle est déjà codée et testée et ... elle fonctionne.

Bonne journée

RMEU


Cette discussion est classée dans : fichier, fonction, unix, language


Répondre à ce message

Sujets en rapport avec ce message

Lecture/écriture de fichier .INI sous Unix? [ par Samprayoga ] Bonjour à tous,C'est mon premier message sur ce forum, alors je vais essayer d'être clair.J'aimerais savoir s'il existe ou si quelqu'un a déjà impléme lecture de fichier [ par Machuet ] Hello, j'ai plusieurs question concernant la manipulation de fichier. En effet venant de VB, j'aimerais savoir si il existe des fonction pour lire un Suprimmer un fichier [ par naney ] tout d'abort un grand merci au webmaster de ce site :D car j'en avais mare de cherche un site comme vbfranc.com mais qui parler du c et du c++Je cherc Remplacer la fonction de copie de fichier sous Windows [ par MangaII ] Salut !Quelqu'un sorai-t-il comment on pe remplacer la fonction de copie de fichier sous Windows par un programme maison !Mon but est d'optimiser la c Fonction "Remplacer Tout" pour un fichier (VC++.Net) [ par milobac ] J'aimerais créer un programme, en VC++.Net, qui remplace une chaîne, à chaque fois qu'elle est détecté dans un fichier, par une autre.En quelque sorte Creer ses propres fonctions [ par CHENRY ] En VC++6, avec les MFC, je voudrais ajouter à mon projet un fichier de fonctions et procédures personnelles. J'ai créé un fichier d'en-tete contenant Utiliser un plugin (en dll) [ par CyberP ] Comment utiliser un plugin ? Le charger et utiliser les fonctions qui sont à l'intérieur ?Je compile un fichier en dll avec une fonction "dire_bonjour PROBLEME pour retourner un char* a partir d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang PROBLEME pour retourner un char* apres recuperation d'une chaine(sscanf) d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang manipulation fichier texte [ par bencholl ] I / Utilisation de fichiers texteLe fichier "Etud_2002.don" comporte des lignes ainsi structurées (le caractère ';' est utilisé comme séparateur) : NO


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales