2013-04-19 9 views
0

Я пытаюсь запустить команду sep с помощью программы C++. Когда я компилирую приведенный ниже код, я получаю предупреждение для argv[0]="sep";, указав "deprecated conversion from string constant to âchar*â [-Wwrite-strings].", когда я запускаю программу ниже, я получаю Exec Failed! все время от строки ниже execvp().Системные вызовы C++ «SED»

#include<iostream> 
#include<string> 
#include<stdio.h> 
#include<string.h> 
#include<unistd.h> 
#include<stdlib.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

using namespace std; 

int main(int argc, char **argv){ 
    pid_t pid; 
    int fail; 

    argv[0] = "sep"; 

    int i=0; 
    while(i < argc){ 
     cout<< i << ": " << argv[i] <<endl; 
     i++; 
    } 

    if(argc < 5){ 
     cout<< "./upload -i -r <key> <source> <destination>" <<endl; 
    }else{ 
     pid = fork(); 
     if(pid < 0){ 
      cout<<"Fork Failed!\n"; 
      exit(1); 
     }else if(pid == 0){     //if you are in the child process 
      fail = execvp("scp", argv); //execute command, return -1 on fail 
      cout<< "Exec Failed!\n"; 
      exit(1); 
     }else{ 
      int status; 
      waitpid(pid, &status, 0); //wait for each pid 
     } 
    } 
    return 0; 
} 
+1

Если 'execvp' терпит неудачу, вы должны проверить [' errno'] (http://en.cppreference.com/w/cpp/error/errno) что неправильно. Использовать, например. ['strerror'] (http://en.cppreference.com/w/cpp/string/byte/strerror), чтобы получить строку для печати. –

+0

приятно, «Нет такого файла или каталога». ./upload -r -i NewKey.pem UploadFolder [email protected]: загружено - это то, что я запускаю в командной строке, где NewKey.pem - это файл для моего сервера AWS, а два других источника и назначения. sep -r -i ключевой источник назначения работает, когда не внутри программы ... – theB3RV

+1

Даже если вы это поняли, строка 'argv [0] =" scp ";' все еще подозревается; если имя вашей программы меньше трех букв, это, вероятно, приведет к сбою. Просто FYI ... – Tom

ответ

1

Wow ... опечатка.

Где argv [0] = "sep";

должен был "УПП"

char** args; 

    args = new char*[argc+2]; //forcing 2 flags 
    args[0] = "scp"; 
    args[1] = "-i"; 
    args[2] = "-r"; 
    args[3] = argv[1]; //key 
    args[4] = argv[2]; //source 
    args[5] = argv[3]; //destination 

    execvp(args[0], args); 
+0

lol ... Я бы никогда не подумал об этом. Я удалю свой ответ, поскольку он отвлекает от реальной проблемы. – Tom

+0

Настоящая проблема = мои жирные пальцы: P – theB3RV

Смежные вопросы