Frage

Hier möchte ich einen Befehl ausführen und muss nach der Ausführung des ersten Befehls Eingaben für diesen Befehl vornehmen.

ich möchte ausführen obex_test Befehl für den Bluetooth -Modus als nach dem Angeben von Eingaben wie 's' zum Starten des Servers, wie kann ich dieses Ding geben?Hier ist mein Code. Ich schreibe dieses Ding und bekomme eine Ausgabe.Ich habe nach der Ausführung einen Fehler bei den Eingabedaten erhalten obex_test Befehl.

Code:

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

void main() {

    char *input = "obex_test -b";   
    FILE *fp = NULL;
    char path[512];


    fp = popen(input, "w");

    if (fp == NULL) 
    {
        printf("\nFailed command\n");
        return;
    }
    else
    {
        printf("\nSuccesss command\n");
    }
    printf("starting while : %d", fp);

    while (fgets(path, sizeof(path) - 1, fp) != NULL) {

        printf("\nOutput    :::  %s \n", path);
    }

    printf("\nEnd\n");
    /* close */
    pclose(fp);

}

Ausgabe :

Successs command
starting while : 69640
End
Using Bluetooth RFCOMM transport
OBEX Interactive test client/server.
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command
> Unknown command

From Ausgabe nach dieser Zeile OBEX Interactive test client/server. Ich muss das Eingabezeichen „s“ eingeben, aber ich kann das nicht direkt machen, es geht in eine Endlosschleife und druckt >Unknown command.

War es hilfreich?

Lösung

Oh, wenn Sie dem Popen-Befehl über Ihre C-Datei Eingaben geben möchten, dann versuchen Sie es auf diese Weise

fputc ( 's', fp );
fputc ( '\n', fp);

Wenn Sie eine Option angeben möchten, schreiben Sie hier 's'

fp ist der Dateizeiger von popen()

es funktioniert gut

in deinem Code:

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

void main() {

    char *input = "obex_test -b";   
    FILE *fp = NULL;
    char path[512];


    fp = popen(input, "w");

    if (fp == NULL) 
    {
        printf("\nFailed command\n");
        return;
    }
    else
    {
        printf("\nSuccesss command\n");
    }

//giving s option to menu
fputc ( 's', fp );
fputc ( '\n', fp);



    printf("starting while : %d", fp);

    while (fgets(path, sizeof(path) - 1, fp) != NULL) {

        printf("\nOutput    :::  %s \n", path);
    }

    printf("\nEnd\n");
    /* close */
    pclose(fp);

}

Bearbeiten:zu überwinden for Endlosschleife

Geben Sie jedes Mal zwei neue Zeilenzeichen ein, nachdem Sie eine Option angegeben haben

wie

//giving s option to menu
fputc ( 's', fp );
fputc ( '\n', fp);
fputc ( '\n', fp);

Andere Tipps

Wenn Sie Zeichen übergeben möchten (Standardoptionen), können Sie fputc oder noch besser verwenden. fputs

#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
    FILE *fp = popen("/path/to/yourBinary cmdLineArgs", "w");

    if (fp == NULL)
    {
        printf("Failed to open the pipe\n");
    }
    else
    {
        // Option1: pass in character, by character
        fputc('n', fp);
        fputc('\n', fp);

        // Option2: provide 's' to the binary with the new line
        fputs("s\n", fp);

        // fputs allows multiple characters
        fputs("4096M\n", fp);

        pclose(fp);
    }

   return 0;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top