linux / c> link> Ruft das Ausführungsergebnis des Shell-Befehls im C-Programm ab.> Mir wurde beigebracht, wie man popen () verwendet.

Betriebsumgebung


CentOS 6.5

Ich habe mich gefragt, ob ich das Ergebnis in einem C-Programm erhalten könnte, indem ich einen Shell-Befehlsstring (z. B. who) mit execl () usw. ausführe.

Referenz http://stackoverflow.com/questions/1776632/how-to-catch-the-ouput-from-a-execl-command

Ich habe es versucht. Der oben verlinkte Code erhält nur eine Zeile, aber unten wird versucht, mehrere Zeilen abzurufen.

get_execl.c


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

int cmd_quem(void) {
  int result;
  int pipefd[2];
  FILE *cmd_output;
  char buf[1024];
  int status;

  result = pipe(pipefd);
  if (result < 0) {
    perror("pipe");
    exit(-1);
  }

  result = fork();
  if(result < 0) {
    exit(-1);
  }

  if (result == 0) {
    dup2(pipefd[1], STDOUT_FILENO); /* Duplicate writing end to stdout */
    close(pipefd[0]);
    close(pipefd[1]);

    execl("/usr/bin/who", "who", NULL);
    _exit(1);
  }

  /* Parent process */
  close(pipefd[1]); /* Close writing end of pipe */

  cmd_output = fdopen(pipefd[0], "r");

  while(1) {
    if (feof(cmd_output)) {
      break;
    }
    if (fgets(buf, sizeof buf, cmd_output)) {
      printf("Data from who command: %s", buf);
    } else {
//      printf("No data received.\n");
    }
  }

  wait(&status);
//  printf("Child exit status = %d\n", status);

  return 0;
}

int main()
{
  cmd_quem(); 
}

Ergebnis


% ./a.out        
Data from who command: wrf      tty1         2016-10-21 01:26 (:0)
Data from who command: wrf      pts/0        2016-10-21 01:29 (:0.0)
Data from who command: wrf      pts/1        2016-10-21 01:32 (:0.0)

Wer ist das Ergebnis?


% who
wrf      tty1         2016-10-21 01:26 (:0)
wrf      pts/0        2016-10-21 01:29 (:0.0)
wrf      pts/1        2016-10-21 01:32 (:0.0)

Der Nachteil ist, dass der Code sehr lang ist.

Verbesserte Version mit popen ()

(Ergänzung 21.10.2016)

@ hurou927 hat mir beigebracht, wie man popen () benutzt.

Dies ist viel einfacher und leichter zu sehen.

Recommended Posts

linux / c> link> Ruft das Ausführungsergebnis des Shell-Befehls im C-Programm ab.> Mir wurde beigebracht, wie man popen () verwendet.
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
Lassen Sie uns das Ausführungsergebnis des Programms mit C ++, Java, Python messen.
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
[Linux] Verwendung des Befehls echo
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Verwendung der C-Bibliothek in Python
Holen Sie sich das Ergebnis der umgekehrten GeoCoding auf Japanisch mit dem Java SDK von GoogleMapsAPI.
Ich möchte das Ausführungsergebnis von strace erfassen
Linux-Benutzer hinzufügen, wie der Befehl useradd verwendet wird
(Denken Sie schnell daran) Verwendung der LINUX-Befehlszeile
Ich möchte auch Linux-Befehle an der Eingabeaufforderung verwenden! Verwenden Sie Linux-Befehle an der Eingabeaufforderung anstelle von Git Bash
[Linux] [C / C ++] Zusammenfassung, wie man pid, ppid, tid bekommt
[Shell] So erhalten Sie den Remote-Standardzweig mit Git
[Linux] [C / C ++] So ermitteln Sie den Wert der Rücksprungadresse einer Funktion und den Funktionsnamen des Aufrufers
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
So überwachen Sie den Ausführungsstatus von sqlldr mit dem Befehl pv
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Python> Verständnis> Zellen> Mir wurde beigebracht, wie man Double Inclusion Notation / itertools verwendet
Ein Memo eines Programms, das ein zweistelliges Datum mit Javascript, Ruby, Python oder einem Shell-Skript abruft.
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
[C-Sprache] Verwendung der Krypta-Funktion unter Linux [Passwort-Hashing]
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Verwendung von Google Test in C-Sprache
Berechnen Verwenden Sie% des Befehls df
Python> set> Mit set () konvertieren> Wörterbuch wird nur Schlüssel> Ich habe gelernt, wie man die Werte des Wörterbuchs in set / dir ({}) / help ({}) / help ({}) konvertiert .Werte)
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Python Ich weiß nicht, wie ich den Druckernamen bekomme, den ich normalerweise benutze.
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
AtCoder AGC 041 C - Ich war süchtig nach der vollständigen Suche nach Domino-Qualität
Ein Memorandum zur Ausführung des Befehls! Sudo magic in Jupyter Notebook
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
So erhalten Sie Hilfe in einer interaktiven Shell
Zusammenfassung der Verwendung von MNIST mit Python
Verwendung der NHK-Programmführer-API
So erhalten Sie die Dateien im Ordner [Python]
Loggen Sie sich mit json mit pygogo ein.
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
So erhalten Sie den Variablennamen selbst in Python
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Verwendung von C216 Audio Controller unter Arch Linux
[C-Sprache] [Linux] Ruft den Wert der Umgebungsvariablen ab
Verwendung des Befehls grep und häufiger Samples
Verwendung der Exist-Klausel in Django Queryset
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Verwendung des in Lobe in Python erlernten Modells
Ich möchte R-Datensatz mit Python verwenden
Ich kann den Darknet-Befehl in Google Colaboratory nicht verwenden!
Python> Link> Mid-Line-Kommentar in Python?> Mir wurde gesagt, dass es besser ist, benannte Argumente zu verwenden.
Ich habe versucht, den WEB-Server der normalen Linux-Programmierung 1st Edition mit C ++ 14 neu zu schreiben
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Belüftung ist wichtig. Was ich getan habe, um die CO2-Konzentration im Raum aufzuzeichnen
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell