谁能用写模式解释我 popen()

use*_*679 5 c bluetooth popen obex

在这里我想执行一个命令,我必须在执行第一个命令后输入这个命令。

我想obex_test为蓝牙模式执行命令,而不是在我必须为启动服务器提供像“s”这样的输入之后,我该如何提供这个东西。这是我的代码,我写了这个东西并得到了输出。执行obex_test命令后我收到输入数据错误。

代码:

#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);

}
Run Code Online (Sandbox Code Playgroud)

输出 :

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
Run Code Online (Sandbox Code Playgroud)

从这一行之后的输出中,OBEX Interactive test client/server.我必须提供输入字符 's' 但我无法直接执行它的无限循环和 printf >Unknown command

Jee*_*tel 3

哦,如果你想通过你的 c 文件向 popen 命令提供输入,那么试试这个方法

fputc ( 's', fp );
fputc ( '\n', fp);
Run Code Online (Sandbox Code Playgroud)

在这里如果你想给 s 选项然后写's'

fp 是文件指针popen()

效果很好

在你的代码中:

#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);

}
Run Code Online (Sandbox Code Playgroud)

编辑:克服无限循环

每次给出任何选项后给出两个新行字符

喜欢

//giving s option to menu
fputc ( 's', fp );
fputc ( '\n', fp);
fputc ( '\n', fp);
Run Code Online (Sandbox Code Playgroud)