0

假设这是我的代码:

int main() {
    char *number;
    system("grep total myfile > filename");

    printf(number);
}

此代码从 myfile 中找到包含“total”的行并将其输出到一个名为 filename 的新文件中。我正在尝试将输出直接设置为字符“数字”,而不必从文件名中写入/读取。有没有办法做到这一点?

谢谢你的帮助!

4

5 回答 5

7

如果我理解你的标题,你想output从被command执行者那里得到,

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

int main()  {
    char number[100];
    FILE *f = popen("echo 200", "r");
    while (fgets(number, 100, f) != NULL) {
        printf( "%s\n", number );
    }
    pclose(f);

    return 0;
}

或者您只是想将变量传递给命令并输出您的变量

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

int main()  {
    int n = 100;
    char buf[100];
    sprintf(buf, "echo %d > filename", n); // format the command
    system(buf);                           // execute
    printf("%d\n", n);                     // print the variable

    return 0;
}
于 2013-05-02T22:03:39.260 回答
3

由于您正在编写文件,因此最简单的方法是打开并读取文件。你可以这样做:

char number[100];
FILE *fp;

system( "echo 200 > filename" );
fp = fopen( "filename", "r" );
if( fp != NULL ) {
    if( fgets(number, 100, fp) != NULL ) {
        printf( "%s\n", number );
    }
    fclose(fp);
}

如果您不想写入/读取文件,您可以通过分叉您的进程、打开管道和使用exec,以及直接从您运行的进程中读取数据来做一些小动作。肯定会有一个关于这个的问题。

于 2013-05-02T22:01:39.253 回答
2

您可以使用popen来启动您的子流程

FILE *fp = popen("echo 200", "r");
if (fp != NULL) {
    char number[20];
    if (fgets(number, sizeof(number), fp))
        printf("%s\n", number);

    pclose(fp);
}
于 2013-05-02T22:04:40.867 回答
2

如果我正确理解你的意思,那不是要走的路。

看看pipedup2

于 2013-05-02T22:02:56.673 回答
0

使用sprintf()函数预先创建具有必要数字的字符串,然后调用 system(your_string)。

sprintf() 示例

于 2013-05-02T22:16:43.377 回答