pid_t childPid = fork();
if (childPid == (pid_t) 0)//zero success
{
const char *path = "/usr/local/mysql/bin/mysql";
//doesn't work
//char * const parmList[] = {"--user=root", "test_db", NULL};
//does work
char * const parmList[] = {"", "--user=root", "test_db", NULL};
execv(path, parmList);
printf("ERROR:\tFork failed.\n");
}
else if (childPid < (pid_t) 0)// -1 failure
{
/* The fork failed. */
printf("ERROR:\tFork failed.\n");
return EXIT_FAILURE;
}
else
{
while (true) {
//stay alive
sleep(1);
}
}
printf("done");
exit(0);
execvを使用してSQLダンプをインポートする際に問題があります。私は最初のparamListを使ってログインすることができなかったが、2番目のparamListはうまくいきました。とにかく、私はのparamリストに追加した場合:私は何かを間違って入力したようexecvからmysql importを実行する
char * const parmList[] = {"", "--user=root", "test_db", "<", "/Users/joelsaltzman/Desktop/dump.sql", NULL};
出力は、コマンドライン引数のためのmysqlのヘルプを示しています。 誰かがこれを動作させる方法を知っていますか?最初の要素は、あなたが実行しようとしているプログラムのファイル名でなければなりませんので
'mysql'プログラムに' --user = root'と言うのは合法ですが(しかし非常に奇妙ですが)、プログラムによってオプション引数として扱われません。また、空の文字列を指定することによってプログラムに何が呼び出されているかを伝えるのではなく、正当なものです(しかし、奇妙です)。これは、プログラムがその名前を見て、それが何をすべきかを決定する場合には重要です。これは、プログラムが呼び出された名前によって異なる動作をするように設計されている場合に発生します。 ( 'cc'と' gcc'は同じ実行可能ファイルへのリンクであり、 'c89'と' c99'は 'gcc'へのリンクではなく単純なスクリプトです)。 –