dup2 를 이용하여 키보드 입력을 프로그램에서 대신하는 코드인데요..
글쓴이: vlzkcbcb / 작성시간: 토, 2009/12/05 - 2:43오후
프로그램에서 키보드입력을 하려합니다.
여기서는 간단하게 echo hello 라고 입력하여 화면에 hello 라는 글자만 나오면 일단 목적은 달성이 되는데요.
컴파일때는 전혀 문제 없는데
실행하면 그냥 아무글자도 안뜨고 끝나네요 ;;
echo hello 라는 글자를 echo hello > /home/test/aaa.txt
라고 바꾸어서 실행해도..aaa.txt 라는 파일은 생기질 않습니다.
뭐가 문제일까요?
#include <fcntl.h>
#include <sys/io.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>
#define BUFSIZE 1024
int ori_stdin;
void stdin_to_program();
void stdin_restore();
int main(int argc, char **argv)
{
stdin_to_program();
return 0;
}
void stdin_to_program( )
{
int fd[2];
pid_t pid;
if( pipe(fd) == -1 )
exit(1);
pid = fork();
// 부모는 STDIN 을 리드파이프로 바꿔주기만 함.
if( pid>0 )
{
close( fd[1] );
ori_stdin = dup( 0 );
dup2( fd[0], 0 );
close( fd[0] );
}
// 자식은 입력파이프에 내용을 입력하여 STDIN 에 전달 후 마치면 STDIN 복구..
else if( pid==0 )
{
int n=0;
int len;
char buf[BUFSIZE];
close( fd[0] );
/////////////////////////////////////////////////////////////////
//
// 여기서부터는 프로그램이 키보드입력을 할 수 있다.
n += sprintf(buf + n, "%s","echo hello");
len = strlen(buf);
printf("buf = [%s], len = [%d]\n",buf,len); // 디버그용...
write( fd[1], buf, len );
// 여기까지 프로그램이 입력을 마친다.
//
/////////////////////////////////////////////////////////////////
close( fd[1] );
stdin_restore();
exit(0);
}
}
void stdin_restore()
{
fflush( stdin );
close( 0 );
dup2( ori_stdin, 0 );
}위에서 디버그용으로 넣은
printf("buf = [%s], len = [%d]\n",buf,len);
의 결과는
buf = [echo hello], len = [10]
입니다..
도움 부탁드립니다.
Forums:


댓글 달기