diff options
| author | Mattias Andrée <maandree@operamail.com> | 2015-05-17 14:49:22 +0200 | 
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2015-05-17 14:49:22 +0200 | 
| commit | 5411b208af6b45cd45b00f45bc135b65a7ae899f (patch) | |
| tree | be4d56e8b7a3efb63018d702f327a4b7c7662fad /doc/examples/timed | |
| parent | m (diff) | |
| download | bus-5411b208af6b45cd45b00f45bc135b65a7ae899f.tar.gz bus-5411b208af6b45cd45b00f45bc135b65a7ae899f.tar.bz2 bus-5411b208af6b45cd45b00f45bc135b65a7ae899f.tar.xz | |
timed write example3.1
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
| -rw-r--r-- | doc/examples/timed/.gitignore | 1 | ||||
| -rw-r--r-- | doc/examples/timed/Makefile | 2 | ||||
| -rw-r--r-- | doc/examples/timed/README | 12 | ||||
| -rw-r--r-- | doc/examples/timed/poll.c | 1 | ||||
| -rw-r--r-- | doc/examples/timed/slow-poll.c | 46 | ||||
| -rw-r--r-- | doc/examples/timed/write.c | 5 | 
6 files changed, 62 insertions, 5 deletions
| diff --git a/doc/examples/timed/.gitignore b/doc/examples/timed/.gitignore index b1076f0..cb90bfb 100644 --- a/doc/examples/timed/.gitignore +++ b/doc/examples/timed/.gitignore @@ -3,4 +3,5 @@ init  write  poll  read +slow-poll diff --git a/doc/examples/timed/Makefile b/doc/examples/timed/Makefile index fe1285c..9506947 100644 --- a/doc/examples/timed/Makefile +++ b/doc/examples/timed/Makefile @@ -1,4 +1,4 @@ -COMMANDS = init cleanup write poll read +COMMANDS = init cleanup write poll read slow-poll  all: ${COMMANDS} diff --git a/doc/examples/timed/README b/doc/examples/timed/README index 215a738..8293758 100644 --- a/doc/examples/timed/README +++ b/doc/examples/timed/README @@ -12,11 +12,19 @@ When you are done run ./cleanup.  Running instances of ./poll will wait for new messages  continuously, but with one second timeouts. +./slow-poll works like ./poll, execpt it will sleep +for one second every time it receives a message. +  Running instances of ./read will read for ten seconds  then time out. -./poll and ./read will stop if the message "stop" is -broadcasted. +./poll, ./read, and ./slow-poll will stop if the message +"stop" is broadcasted. + +./write will wait for atmost a tenth of a seconds before +failing. This means that if two instances of ./write is +started at the same time one of them will fail if +./slow-poll is running.  ./poll, ./read, ./init and ./cleanup are run without any  additional arguments. ./write is run with the message diff --git a/doc/examples/timed/poll.c b/doc/examples/timed/poll.c index d57d4ea..5ae45d4 100644 --- a/doc/examples/timed/poll.c +++ b/doc/examples/timed/poll.c @@ -24,7 +24,6 @@ main()  		if (message == NULL) {  			t(errno != EAGAIN);  			printf("waiting... %lli\n", ++tick); -			sleep(1);  			continue;  		}  		tick = 0; diff --git a/doc/examples/timed/slow-poll.c b/doc/examples/timed/slow-poll.c new file mode 100644 index 0000000..5076ef6 --- /dev/null +++ b/doc/examples/timed/slow-poll.c @@ -0,0 +1,46 @@ +#include <bus.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> + +#define t(stmt)  if (stmt) goto fail + + + +int +main() +{ +	bus_t bus; +	const char *message; +	long long tick = 0; +	struct timespec timeout; +	t(bus_open(&bus, "/tmp/example-bus", BUS_RDONLY)); +	t(bus_poll_start(&bus)); +	for (;;) { +		t(clock_gettime(CLOCK_MONOTONIC, &timeout)); +		timeout.tv_sec += 1; +		message = bus_poll_timed(&bus, &timeout, CLOCK_MONOTONIC); +		if (message == NULL) { +			t(errno != EAGAIN); +			printf("waiting... %lli\n", ++tick); +			continue; +		} +		tick = 0; +		message = strchr(message, ' ') + 1; +		if (!strcmp(message, "stop")) +			break; +		printf("\033[01m%s\033[21m\n", message); +		sleep(1); +	} +	t(bus_poll_stop(&bus)); +	bus_close(&bus); +	return 0; + +fail: +	perror("poll"); +	bus_poll_stop(&bus); +	bus_close(&bus); +	return 1; +} + diff --git a/doc/examples/timed/write.c b/doc/examples/timed/write.c index 250ba14..acd8c6f 100644 --- a/doc/examples/timed/write.c +++ b/doc/examples/timed/write.c @@ -15,13 +15,16 @@ int  main(int argc, char *argv[])  {  	bus_t bus; +	struct timespec timeout;  	if (argc < 2) {  		fprintf(stderr, "%s: USAGE: %s message\n", argv[0], argv[0]);  		return 2;  	}  	sprintf(message, "0 %s", argv[1]);  	t(bus_open(&bus, "/tmp/example-bus", BUS_WRONLY)); -	t(bus_write(&bus, message, 0)); +	t(clock_gettime(CLOCK_MONOTONIC, &timeout)); +	timeout.tv_nsec += 100000000L; +	t(bus_write_timed(&bus, message, &timeout, CLOCK_MONOTONIC));  	bus_close(&bus);  	return 0; | 
