Друзья, можно ли каким-либо способом выполнить конструкцию, например
echo "pass" | pw usermod -u 1005 -h 0
средствами системного вызова execl ?
Самостоятельно разобраться в данном вопросе не получилось.
Вот пример программы, которая делает по сути то же самое, но с помощью каналов.
Код: Выделить всё
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
int fds[2];
pid_t pid;
if(pipe(fds)<0)
{
perror("pipe failed");
exit(1);
}
if((pid=fork())<0)
{
perror("fork failed");
exit(2);
}
if(pid==0)
{
close(fds[1]);
dup2(fds[0], 0);
execl("/usr/sbin/pw", "pw","usermod","-u","1005","-h","0", NULL);
perror("failed to run pw");
}
else
{
close(fds[0]);
dup2(fds[1], 1);
execl("/bin/echo", "echo","zxcv", NULL);
perror("failed to run echo");
}
exit(0);
}