메인 프로그램에서 보조 프로그램을 실행하기 위해 메인 프로그램을 실행하는 두 개의 프로그램 (main과 aux)을 만들어야합니다. 부모는 빈 줄 '\ n'까지 사용자로부터 입력을받으며 자식은 aux를 실행하여 입력을 다시 인쇄합니다. execlp() 대신 주석이 달린 코드로 main에서 작동하도록 할 수는 있지만 execlp (aux)가 제대로 작동하지는 않습니다. 어떤 도움을 주셔서 감사합니다.C - 하나의 프로그램에서 다른 프로그램으로 파이프 입력
"main.c에"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int fd[2], i;
char line[100], buffer[100];
pipe(fd);
pid_t pid = fork();
if (pid < 0) {
printf("Fork Failed\n");
exit(-1);
}
else if (pid > 0) {
close(fd[0]);
while(fgets(line, sizeof(line), stdin) && line[0] != '\n') {
write(fd[1], line, sizeof(line));
}
close(fd[1]);
}
else {
close(fd[1]);
dup2(fd[0], STDIN_FILENO);
//while(read(fd[0], buffer, sizeof(buffer)))
// printf("> %s", buffer);
execlp("./aux", "aux", (char *)0);
}
return 0;
}
"aux.c"
#include <stdio.h>
#include <stdlib.h>
int main() {
char data[100];
while(fgets(data, sizeof(data), stdin))
printf(">%s\n", data);
return 0;
}
샘플 입력/출력
this
>this
is a test
>
> test
only prints larger text with random \n
>
>ts larger text with random \n
안녕하세요, 원본 이미지를 완전히 대체하는 exec *() 패밀리로 새 이미지를 실행하고 있습니다. 프로그램 텍스트, 힙, 스택 등과 비슷합니다. –
[ALP] (http://www.makelinux.net/alp/)와 [execve (2)]와 같은 매뉴얼 페이지 (http://man7.org/linux/man -pages/man2/execve.2.html) –
모든 경고와 디버그 정보로 컴파일 :'gcc -Wall -Wextra -g' 그러면 디버거'gdb' **와 [strace (1)] (http : //man7.org/linux/man-pages/man1/strace.1.html). 디버깅'printf'를 추가하십시오. 'execlp'가 실패하지 않았는지 확인하십시오 (예 :'perror ("execlp");'....) –