9
votes

Comment stocker la sortie de la commande système dans une variable?

Je exécute une fonction système () qui me renvoie un nom de fichier. Maintenant, je ne veux pas afficher la sortie sur l'écran (ie le nom de fichier) ou le tuyau à un nouveaufile. Je veux juste le stocker dans une variable. est-ce possible? si c'est le cas, comment? merci


3 commentaires

4 Réponses :



11
votes

Un seul nom de fichier? Oui. C'est certainement possible, mais n'utilisant pas System () code>.

Utilisez popen () code> . Ceci est disponible dans et , vous avez étiqueté votre question avec les deux mais sont Aller probablement à coder dans l'un ou l'autre. p>

Voici un exemple en C: P>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fpipe;
    char *command = "ls";
    char c = 0;

    if (0 == (fpipe = (FILE*)popen(command, "r")))
    {
        perror("popen() failed.");
        exit(EXIT_FAILURE);
    }

    while (fread(&c, sizeof c, 1, fpipe))
    {
        printf("%c", c);
    }

    pclose(fpipe);

    return EXIT_SUCCESS;
}


6 commentaires

Cela entraînera un comportement non défini à l'appel printf , puisque Fread () n'est pas null terminer la chaîne stockée dans ligne .


Merci, @marklakata. J'ai réparé cela.


Les paramètres de l'ordre des fread sont faux. Les 2e et 3ème paramètres sont échangés. Il ne fonctionnera pas correctement.


@vicky: Merci d'avoir souligné que cela ne fonctionnerait pas avec la production de moins de 256 caractères. Fixé.


Pourquoi tu retournes -1 à la fin? -1 signifie que c'est échoué.


@AMIR 9 ans après avoir écrit cette réponse, je suis aussi perplexe que vous êtes. La fonction principale devrait renvoyer exit_success: Stackoverflow.com/a/8696712



1
votes

Voici mon implémentation C ++, qui redirige système () stdout à un système de journalisation. Il utilise getline (code> getline () . Il lancera une exception si elle ne peut pas exécuter la commande, mais ne jettera pas si la commande fonctionne avec statut non nul. xxx


0 commentaires

2
votes

Eh bien, il y a un moyen de plus facile par lequel vous pouvez stocker la sortie de commande dans un fichier appelé méthode de redirection. Je pense que la redirection est assez facile et elle sera utile dans votre cas.

Donc, par exemple, c'est mon code dans C ++ xxx

ici Le signe de redirection redirige facilement toutes les sorties de cette commande dans un fichier A.Text.


0 commentaires