Re: e3 flavors

From: Albrecht Kleine ([email protected])
Date: Fri Dec 08 2000 - 20:48:53 CET


Hi, everyone!

> I also have my *desiderata* list: it is possible, in e3vi command-line
> mode, to call "ex" command such "1,$ s/X/Y"?
>
> Michele

Okay Michele, you could get it :) But unfortunately I need some HELP!

For the 1st time I've written assembler code for two pipes in a bidirectional
connection using e3 as a parent and "sed" as a child, but only small test
cases < 4 kbyte are working okay :-((

Because assembler sources are hard to explain let me include some
quite similar C code.

......
    pipe(fd1);
    pipe(fd2);
    if(fork()>0)
    {
        close(fd1[0]);
        close(fd2[1]);
        strcpy(command,"s/foo/bar/");
        write(fd1[1],"a foo test\n",11);
// if writing more than 20480 byte pipe hangs

        close(fd1[1]);
// if missing, pipe hangs, at least with 'sed' child
        
        n=read(fd2[0],buf,20480);
// never got more than 4096 byte!

        close(fd2[0]);
        buf[n]=0;printf("%s",buf);
    }
    else
    {
        close(fd1[1]);
        close(fd2[0]);
        dup2(fd1[0],STDIN_FILENO);
        close(fd1[0]);
        dup2(fd2[1],STDOUT_FILENO);
        close(fd2[1]);
        exec....("sed","sed","-e",command,NULL);
        exit
    }
.....

(Keep in mind that I'm not using this C code, but 1:1 assembler code
using similar _kernel_ calls, not _libc_ calls.)

How this is to change to pass data up to 1 MB to sed and vice versa
w/o blocking?

I don't think that's a special assembler problem, but I don't
need hints like "Why not use popen()?". Only solutions using
direct kernel calls can help, no libc-depending wrapped stuff.

If you can't help, please feel free to forward to someone else
you expect he|she can help.

Cheers
Albrecht

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



This archive was generated by hypermail 2.1.6 : Sat Feb 08 2003 - 15:27:17 CET