2013-04-03 4 views
0
mkfifo fifo1 
mkfifo fifo2 
mkfifo fifo3 
xterm -e bash -c "cat <fifo1 & tee fifo2 fifo3" & 
xterm -e bash -c "cat <fifo2 & tee fifo1 fifo3" & 
xterm -e bash -c "cat <fifo3 & tee fifo1 fifo2" & 

Любая идея, как выполнить приведенные выше команды unix в программировании c. Я пытаюсь использовать execl, но, похоже, не работает. Спасибо заранее.нужна помощь с использованием xterm

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main(){ 
int pid; 
char parmList[100]; 
int i=1; 

sprintf(parmList,"-e bash -c {cat <fifo%d & tee fifo%d fifo%d}",i,i+1,i+2); 


if ((pid = fork()) == -1) 
    perror("fork error"); 
else if (pid == 0) 
{ 
    execl("/usr/bin/xterm","xterm",parmList,NULL); 
} 

return 0; 

} 
+0

Прежде всего, 'execl' хочет программу аргументы _separate_. То есть один аргумент для '' -e '', один для' 'bash'' и т. д. –

+0

Вы должны также убедиться, что ваш' char [] 'is' NULL'-terminated, используйте 'memset', прежде чем использовать массив. –

+0

Вы уверены, что имеете в виду 'cat anishsane

ответ

1

Используя execv системный вызов (execv man page)

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main(){ 
    int pid; 
    int i=1; 
    char command[100]; 
    char * args[] = { 
     "-e", 
     "bash", 
     "-c", 
     NULL, 
     NULL 
    }; 
    sprintf(command, "{cat <fifo%d & tee fifo%d fifo%d}", i, i+1, i+2); 
    args[3] = command; 

    if ((pid = fork()) == -1) 
     perror("fork error"); 
    else if (pid == 0) 
     execv("/usr/bin/xterm", args); 
    return 0; 
} 
Смежные вопросы