LINUX.ORG.RU

exec и пробелы в пути к файлу - проблема


0

0

Если имя файла содержит пробелы, то execv возвращает -1. Пробовал и имя файла в кавычки заключать, и пробел экранировать - не помогает.

execv("/home/user/dir/a.out") - работает, execv("/home/user/dir with spaces/a.out") - нет.

Помогите пожалуйста решить эту проблему =(

anonymous

Re: exec и пробелы в пути к файлу - проблема

"Не верю" (c)

Какой код ошибки?

tailgunner ★★★★★ ()

Re: exec и пробелы в пути к файлу - проблема

execve непосредственно бинарник запускает. Остальные через шелл его пропускают.

dilmah ★★★★★ ()

Re: exec и пробелы в пути к файлу - проблема

небось system зовёшь, а не execv. короче, тоже не верю. :)

Teak ★★★★★ ()

Re: exec и пробелы в пути к файлу - проблема

> execve непосредственно бинарник запускает. Остальные через шелл его пропускают.

O_O

NAME

execl, execlp, execle, execv, execvp - execute a file

...

DESCRIPTION

The exec family of functions replaces the current process image with a

new process image. The functions described in this manual page are

front-ends for the function execve(2).

tailgunner ★★★★★ ()

Re: exec и пробелы в пути к файлу - проблема

как в system экранировать я уже догадался, зову именно execv, если совсем точно зову вот так, возвращается -1:

execv("/home/user/dir with spaces/a.out", NULL);

Это должно срабатывать?

anonymous ()

Re: exec и пробелы в пути к файлу - проблема

> ну я тоже не совсем прав, но execv таки может shell вызвать. Сравни:

># zgrep shell /usr/share/man/man3/execve.3.gz | wc -l

> 0

># zgrep shell /usr/share/man/man3/execv.3.gz | wc -l

Э нет, так легко не отделаешься! :D

"execlp and execvp will duplicate the actions of the shell in searching for an executable file"

"If the header of a file isn't recognized (the attempted execve returned ENOEXEC), these functions will execute the shell with the path of the file as its first argument."

Насколько я знаю, второе в Linux происходит на уровне ядра, но поведение execv и execve всё-таки совпадает.

tailgunner ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.