LINUX.ORG.RU

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


0

0

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

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

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

anonymous

"Не верю" (c)

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

tailgunner ★★★★★
()

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

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> 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 ★★★★★
()
Ответ на: комментарий от tailgunner

ну я тоже не совсем прав, но 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
       3

dilmah ★★★★★
()
Ответ на: комментарий от Teak

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

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

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

anonymous
()
Ответ на: комментарий от dilmah

> ну я тоже не совсем прав, но 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 ★★★★★
()
Ответ на: комментарий от anonymous

Если это бинарь - должно срабатывать. Если скрипт с #! - не обязано. Если хочешь, чтобы тебе помогли - код ошибки в студию.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

execve работает, execv - нет. Спасибо огромное товарищу dilmah за подсказку, проблема решена. хотя почему не работает execv - загадка.

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