вот исходник проги "simple"

#include
void main()
{
char s[100]="123";
while (s[0]!='0')
{
gets(s);
printf("simple.c: string readed:\"%s\"\n",s);
}
}


что делает - думаю, понятно, а вот исходник проблемной проги:


#include
#include
#define PATH_MAX 1000
#define SIZE 100000
static char ptyfilename[PATH_MAX];
static int ptyslavefd=-1;

int main()
{
int t;
char msg[SIZE];
int pty;
pid_t pid;
printf("getpty..\n");
if ((pid=forkpty(&pty, ptyfilename, 0, 0))0)
{
char touch[30]="touch 123\n\n\n";
printf("parent:\n");
printf("pty file name:\"%s\"\n",ptyfilename);
sleep(1);
write(pty,touch,strlen(touch));
sleep(3);
t = read(pty,msg,SIZE);
msg[t]='\0';
printf("readed from terminal: [begin]%s[end]\n",msg);
close(pty);
}
else
{
char s[100];
int res;
printf("child: pty_fd=%d\n",pty);
printf("execl...\n");
res=execl("simple","simple",NULL);
// res=execl("/bin/bash","bash",NULL);
printf("result:%d\n\n",res);
perror("execl");
}
}


вывод проги:

getpty..
parent:
pty file name:"/dev/pts/7"
readed from terminal: [begin]child: pty_fd=0
execl...
touch 123


simple.c: string readed:"touch 123"
simple.c: string readed:""
simple.c: string readed:""
[end]


теперь мы хотим вместо запуска simple поставить запуск bash, чтобы
эти самые команды исполнялись, получается такой вывод:

getpty..
parent:
pty file name:"/dev/pts/7"
readed from terminal: [begin]child: pty_fd=0
execl...
touch 123


[end]

bash, судя по списку процессов, запускается, однако файлик "123" не создаётся
вопрос: почему? и как это исправить?