2013-02-28 2 views
1

Какого будет C++ equivalemt команды для указанных ниже команд PHP:C++ эквивалента для PHP shell_exec

$command = shell_exec("sqlldr {$connect_string} control={$ctl_file_name} log={$log_file_name}"); 
+0

Если вы хотите, чтобы выполнить какую-либо команду оболочки с C++ попытаться взглянуть на HTTP: // StackOverflow .com/questions/7207916/execute-shell-commands-using-popen-in-c – user1929959

+0

, если вы хотите использовать PHP, используйте PHP. Если вы хотите C++, используйте код C++. Для вызова оболочки в C++ вы, скорее всего, используете 'system()', но это не даст вам строку обратно. Я на 99% уверен, что библиотека C++ C++/реализация/ADO-Provider делает это лучше. – Najzero

+0

Я думаю, что этот протектор, который показывает, как использовать popen, может быть вашим ответом http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c –

ответ

0

Так на основе ваших комментариев решение, которое будет работать было бы использовать POPEN (3):

#include <cstdio> 
#include <iostream> 
#include <string> 

int main() 
{ 
    // Set file names based on your input etc... just using dummies below 
    std::string 
    ctrlFileName = "file1", 
    logFileName = "file2", 
    cmd = "sqlldr usr/[email protected] control=" + ctrlFileName + " log=" + logFileName ; 

    std::cout << "Executing Command: " << cmd << std::endl ; 

    FILE* pipe = popen(cmd.c_str(), "r"); 

    if (pipe == NULL) 
    { 
    return -1; 
    } 

    char buffer[128]; 
    std::string result = ""; 

    while(!feof(pipe)) 
    { 
    if(fgets(buffer, 128, pipe) != NULL) 
    { 
     result += buffer; 
    } 
    } 

    std::cout << "Results: " << std::endl << result << std::endl ; 

    pclose(pipe); 
} 
+0

Спасибо большое @Shafik – sajal

0

Попробуйте forkpty, вы получите дескриптор файла, который можно использовать для чтения из другого псевдотерминала.