On Sun, 2002-10-20 at 09:34, Wez Furlong wrote:
Thanks for the fast reply Wez,
> There's not much we can tell you about this unless you post the
> rest of the lines of that function.
See below for the code
>
> Perhaps you did not include <php.h> ?
Yep thats there, I used exec_skel to create the basic module.
>
> Note: always prefer this:
>
> read(fd, buf, sizeof(buf));
>
> to this:
>
> read(fd, buf, 1024);
Thanks, done that.
OK, what I'm trying to achieve is basically wrapping pipe, read and
write so in a php script I can create 2 pipes, fork the process using
pcntl_fork() and have 2 way non blocking communication with more control
than proc_open()
I have so far written this function that creates the pipe and returns an
array of the pipes descriptors:
PHP_FUNCTION(pipe)
{
pipe_r_le_struct *st_pipe_r;
pipe_w_le_struct *st_pipe_w;
zval *read;
zval *write;
int pipe_fd[2];
if(pipe(pipe_fd) <0){
php_error(E_ERROR, "Could not create pipe");
}
st_pipe_r=emalloc(sizeof(pipe_r_le_struct));
st_pipe_w=emalloc(sizeof(pipe_w_le_struct));
st_pipe_r->fd=pipe_fd[0];
st_pipe_w->fd=pipe_fd[1];
MAKE_STD_ZVAL(read);
MAKE_STD_ZVAL(write);
ZEND_REGISTER_RESOURCE(read, st_pipe_r, le_pipe_r)
ZEND_REGISTER_RESOURCE(write, st_pipe_w, le_pipe_w)
array_init(return_value);
add_assoc_resource(return_value, "read", Z_RESVAL_P(read));
add_assoc_resource(return_value, "write", Z_RESVAL_P(write));
}
This function appears to work as expected
and now I'm trying to write functions that will read and write from the
pipe. So far I have this, it isn't finished as you will see.
PHP_FUNCTION(pipe_read)
{
pipe_r_le_struct *st_pipe_r;
zval *read;
zval * res;
char buf[1024];
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &res) ==
FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(st_pipe_r, pipe_r_le_struct *, &res, -1,
"pipe_r", le_pipe_r);
if(!st_pipe_r) RETURN_FALSE;
read(fd, buf, sizeof(buf));
}
I was just testing that it still compiles and it fails on the
read(fd, buf, sizeof(buf)); line. with the error
called object is not a function
As I mentioned if I move that line into a c function it compiles fine.
Thanks
Tony
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php