LINUX.ORG.RU

псевдошелл


0

0

Как можно на базе одних только системных вызовов (read, write, execve) решить такую задачу на СИ

Принимать от пользователя запрос в шелл и выдовать ответ, например:

$ proga "pwd" /root $ proga "ls -l" drwxr-xr-x 2 root root 1024 Nov 13 21:09 SC/ -rwxr-xr-x 1 root root 476799 Nov 13 11:16 addr* -rw-r--r-- 1 root root 445 Nov 13 11:16 addr.c -rwx------ 1 root root 6104 Nov 12 19:39 chkconfig* drwxr-xr-x 5 root root 1024 Nov 12 03:27 confsys/ $

Заранее спасибо!

anonymous

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

О! отлично! c popen() в самый раз!!!!

Я использовал такую конструкцию:

FILE* fd; fd = popen([argv1],"w"); write(1,fd,sizeof(fd)); pclose(fd);

Вот только что за фигня выводиться вместе с выводом результата? Появляются всякие левые символы...

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

попробуй так:

FILE* fd;
fd = popen([argv1],"w");
/* write(1,fd,sizeof(fd)); */
pclose(fd);

Вот строчка из мана:
... the command's standard output is the same
as that of the process that called popen(),
unless this is altered by the command itself.


А левые сиволы это сама структура fd, которую
ты зачем то записываешь в stdout :-)

Почему используешь write(), кстати? С FILE* же
обычно используется fwrite()

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

> А левые сиволы это сама структура fd, которую
> ты зачем то записываешь в stdout :-)

Вернее указатель на на fd

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

:) Да че-то сглючило))) А какие возможны варианты с pipe()? Только без fdopen() c FILE*

anonymous
()

Чой-то не въезжаю в задачу...

При чем тут шелл?

Ты свой шелл хочешь написать? Или прогонять юзеровские команды через стандартные утилиты, стартуемые через шелл? Или просто прогонять юзеровские команды через стандартные утилиты?

И что такое "запрос в шелл"?

А куда ответ выдавать?

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