使用C编程使用POPEN将值存储到字符串

使用C编程使用POPEN将值存储到字符串,c,unix,popen,C,Unix,Popen,我试图在UNIX下编写一个C代码,从文本的每一行读取第三个单词,并使用POPEN将其存储到字符串中。然而,我的代码在while循环中的行中给了我一个错误(赋值运算符需要可修改的左值)。这是我的密码: int main() { int license = 0; char number[100]; FILE *file = popen("grep User results_today.TXT_05012013 > filename", "r"); if ( file != NUL

我试图在UNIX下编写一个C代码,从文本的每一行读取第三个单词,并使用POPEN将其存储到字符串中。然而,我的代码在while循环中的行中给了我一个错误(赋值运算符需要可修改的左值)。这是我的密码:

    int main() {

int license = 0;
char number[100];


FILE *file = popen("grep User results_today.TXT_05012013 > filename", "r");
if ( file != NULL)
{
    char line [128];
    while (fgets(line, sizeof line, file) != NULL)
    {

        number = popen("cut -f3 -d' '", "r");

    }
    fclose (file);

    printf("Hello %s\n", number);
}

我知道这里有一些错误,因为我对C还是有点陌生。但是请帮我纠正它们,谢谢

将popen的结果分配给固定大小的字符数组。这是不可能的

number = popen("cut -f3 -d' '", "r");

像第一个popen一样操作->将其分配给FILE*file2

将popen的结果分配给固定大小的字符数组。这是不可能的

number = popen("cut -f3 -d' '", "r");
FILE *file = popen("grep User results_today.TXT_05012013 > filename", "r");
像第一个popen一样操作->将其分配到文件*file2

FILE *file = popen("grep User results_today.TXT_05012013 > filename", "r");
这将运行
grep
命令查找
User
,并将输出重定向到文件
filename
。它将返回一个
文件*
,允许您读取该命令的输出,但由于该输出已被重定向,您将无法获得任何信息

popen("cut -f3 -d' '", "r");
这将运行
cut
命令,由于该命令没有文件参数,因此将从stdin读取并写入stdout,该stdout可由popen返回的
文件*
读取,但您不会对其执行任何操作

您可能想要更像:

char line[128];
int number;
FILE *file = popen("grep User results_today.TXT_05012013 | cut -f3 -d' '", "r");
if (file) {
    while (fgets(line, sizeof line, file)) {
        if (sscanf(line, "%d", &number) == 1) {
            printf("It's a number: %d\n", number);
        }
    }
    pclose(file);
}
这将运行
grep
命令查找
User
,并将输出重定向到文件
filename
。它将返回一个
文件*
,允许您读取该命令的输出,但由于该输出已被重定向,您将无法获得任何信息

popen("cut -f3 -d' '", "r");
这将运行
cut
命令,由于该命令没有文件参数,因此将从stdin读取并写入stdout,该stdout可由popen返回的
文件*
读取,但您不会对其执行任何操作

您可能想要更像:

char line[128];
int number;
FILE *file = popen("grep User results_today.TXT_05012013 | cut -f3 -d' '", "r");
if (file) {
    while (fgets(line, sizeof line, file)) {
        if (sscanf(line, "%d", &number) == 1) {
            printf("It's a number: %d\n", number);
        }
    }
    pclose(file);
}

首先,我不是一个C程序员 这是我的实现(当然有很多借用的行;))。 我受够了

popen
while fgets
 printf // I want to store in char* got it?
这是代码。它可能并不完美,但确实起到了作用:)

#包括
#包括
#包括
字符*串联(字符*目的地,字符*源){
char*out=(char*)malloc(strlen(源)+strlen(目标)+1);
if(out!=NULL){
strcat(out,dest);
strcat(输出、源);
}
返回;
}
char*executeCmd(char*cmd){
文件*fp;
int BUFF_SIZE=1024;
int size_线;
字符行[BUFF_SIZE];
char*results=(char*)malloc(BUFF_SIZE*sizeof(char));
如果(cmd!=NULL){
/*打开命令进行读取*/
fp=popen(cmd,“r”);
如果(fp!=NULL){
/*一次读取一行输出-输出它*/
while(fgets(line,size_line=sizeof(line,fp)!=NULL){
结果=连接(结果,行);
}
}
/*接近*/
pclose(fp);
}//如果cmd!null,则结束
返回结果;
}
int main(int argc,char*argv[]){
char*out=executeCmd(“ls-l”);
printf(“%s\n”,out);
返回0;
}

首先,我不是C程序员 这是我的实现(当然有很多借用的行;))。 我受够了

popen
while fgets
 printf // I want to store in char* got it?
这是代码。它可能并不完美,但确实起到了作用:)

#包括
#包括
#包括
字符*串联(字符*目的地,字符*源){
char*out=(char*)malloc(strlen(源)+strlen(目标)+1);
if(out!=NULL){
strcat(out,dest);
strcat(输出、源);
}
返回;
}
char*executeCmd(char*cmd){
文件*fp;
int BUFF_SIZE=1024;
int size_线;
字符行[BUFF_SIZE];
char*results=(char*)malloc(BUFF_SIZE*sizeof(char));
如果(cmd!=NULL){
/*打开命令进行读取*/
fp=popen(cmd,“r”);
如果(fp!=NULL){
/*一次读取一行输出-输出它*/
while(fgets(line,size_line=sizeof(line,fp)!=NULL){
结果=连接(结果,行);
}
}
/*接近*/
pclose(fp);
}//如果cmd!null,则结束
返回结果;
}
int main(int argc,char*argv[]){
char*out=executeCmd(“ls-l”);
printf(“%s\n”,out);
返回0;
}

他应该自己解决;)顺便说一句,
getdelim
是一种读取整个输入的简便方法。@MircoEllmann谢谢,我猜这就是问题所在。现在我有了一个名为“filename”的文件,我以前使用grep User命令来提取我想要的信息,那么使用代码中的while循环来提取文件“filename”每行的第三个单词有没有不同的方法?谢谢。您可以尝试将这些命令与| grep User results_today.TXT_05012013 | cut-f3-d“”相结合。这样可以保存第二个popen。试试看……他应该自己弄清楚;)顺便说一句,
getdelim
是一种读取整个输入的简便方法。@MircoEllmann谢谢,我猜这就是问题所在。现在我有了一个名为“filename”的文件,我以前使用grep User命令来提取我想要的信息,那么使用代码中的while循环来提取文件“filename”每行的第三个单词有没有不同的方法?谢谢。您可以尝试将这些命令与| grep User results_today.TXT_05012013 | cut-f3-d“”相结合。这样可以保存第二个popen。试试看……谢谢你的帮助。看起来你的代码将在文本文件上运行grep User和cut命令,并输出到file*文件,然后使用while循环输出到number?为什么我运行你的代码却什么都没给我?甚至连“这是一个数字”部分都没有。。。我错过什么了吗?谢谢你的帮助。看起来您的代码将在文本文件上运行grep User和cut命令,并输出到file*文件,然后使用while循环输出