linux 执行一个shell命令 并获取其返回值

    技术2025-01-06  5

    #define RESULT_MAX_BUFF_SIZE  4096

    int exec_cmd_and_get_result( const char *cmd_str, char *buffer )  {     int cnt;     FILE *pf;     pf = popen(cmd_str, "r");     cnt=fread(buffer, 1,RESULT_MAX_BUFF_SIZE, pf);     buffer[cnt-1] = '\0';       

             printf( "fread cnt = %d\n", cnt );     //printf( "strlen(buffer) = %d\n", strlen(buffer) );

        printf( "buffer = %s\n", buffer );          pclose(pf);     return 0; }

    void printdir(char *dir, int depth) {     DIR *dp;     char buffer[RESULT_MAX_BUFF_SIZE];     char cmd_str[RESULT_MAX_BUFF_SIZE];     struct dirent *entry;     struct stat statbuf;       if( (dp = opendir(dir)) == NULL ){         fprintf(stderr,"cannot open directory: %s\n", dir);         return;     }     //fprintf(stdout,"open directory: %s\n", dir);     chdir(dir);     while((entry = readdir(dp)) != NULL) {         lstat(entry->d_name,&statbuf);         if( S_ISDIR(statbuf.st_mode) ){             if( strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0 ){                 continue;             }             //printf("%*s%s/\n",depth,"",entry->d_name);             if( strcmp("sys",entry->d_name) == 0 || strcmp("proc",entry->d_name) == 0 ){                 continue;             }             printdir(entry->d_name,depth+4);         }else{             //printf("%*s%s\n",depth,"",entry->d_name);                          exec_cmd_and_get_result("pwd", buffer);              //printf("result = %s\n", buffer);

                 strcat(buffer, "/");              strcat(buffer, entry->d_name);

                 printf("path = %s\n", buffer);

                 strcpy( cmd_str, "cat ");              strcat(cmd_str, buffer);

                 exec_cmd_and_get_result(cmd_str, buffer);              //printf("result = %s\n", buffer);                              //printf("result1 = %s\n", buffer);

                 if(strlen(buffer)==83){                  printf("result1 = %s\n", buffer);

                 }

                 printf("result1 len = %d\n", strlen(buffer) );                                     }     }     chdir("..");     closedir(dp); }

    Processed: 0.010, SQL: 9