This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
We have developed a pipe implementation which we find useful for
interprocess communication. It is also the basis for the pty implementation
in the following submission.
As seems appropriate for an embedded system, pipes are instantiated
statically. The same mechanism is used as for other devices: an entry is
made in the DEVTAB for each pipe the application wishes to use. An arbitrary
number of pipes can be created. The application then uses open(), write(),
read(), select(), etc. to access the pipe. Both read and write selects are
supported.
One option implemented is a timeout applied to reads and writes set on
instantiation: FOREVER, NO_WAIT or a timeout in ticks (this is separate from
the select timeout).
The pipe can also be purged (pipelib_purge just calls fsync which discards
any content).
We have inserted the attached files in packages/io/pipe/... and made the
following entry in ecos.db
package CYGPKG_IO_PIPELIB {
alias { "Pipe Driver Library"}
directory io/pipe
script pipelib.cdl
description "This package contains a device driver for pipes."
}
Examples of use (without error checks, etc):
#include <cyg/io/pipelib.h>
// Instantiate a pipe device (the application supplies the buffer space) at
file scope
static char buf[500];
PIPELIB_DEVICE(pipe0, "/dev/pipe0", buf, sizeof(buf),
PIPE_TIMEOUT_WAIT_FOREVER);
main()
{
// Open the pipe
int pipeFd;
pipeFd = open("/dev/pipe0", O_RDWR);
// optionally clear the pipe by dumping any current content
pipelib_purge(pipeFd);
// write to the pipe
write(pipeFd, "stuff", 5);
// select on reading from the pipe
fd_set fds;
FD_ZERO(&fds);
FD_SET(pipeFd, &fds);
select(FD_SETSIZE, &fds, NULL, NULL, NULL);
// read from the pipe
char readbuf[10];
read(pipeFd, readbuf, sizeof(readbuf));
}
Comments, questions and suggestions are appreciated. This is intended as a
starting point for discussion as some documentation and test cases will also
be required. Hopefully this will be useful to others as well.
Cameron Taylor
WaveRider Communications
Attachment:
pipelib.cdl
Description: Binary data
Attachment:
pipelib.h
Description: Binary data
Attachment:
pipelib.c
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |