Я пытаюсь запустить команду 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;
}
Если 'execvp' терпит неудачу, вы должны проверить [' errno'] (http://en.cppreference.com/w/cpp/error/errno) что неправильно. Использовать, например. ['strerror'] (http://en.cppreference.com/w/cpp/string/byte/strerror), чтобы получить строку для печати. –
приятно, «Нет такого файла или каталога». ./upload -r -i NewKey.pem UploadFolder [email protected]: загружено - это то, что я запускаю в командной строке, где NewKey.pem - это файл для моего сервера AWS, а два других источника и назначения. sep -r -i ключевой источник назначения работает, когда не внутри программы ... – theB3RV
Даже если вы это поняли, строка 'argv [0] =" scp ";' все еще подозревается; если имя вашей программы меньше трех букв, это, вероятно, приведет к сбою. Просто FYI ... – Tom