Example #1
0
void
read_and_print(int pos)
{
    struct node a;
    read_node(pos, &a);
    if (a.right_idx) {
        read_and_print(a.right_idx);
    }
    printf("%d ", a.key);
    if (a.left_idx)
        read_and_print(a.left_idx);
}
Example #2
0
int
main(int argc, char *argv[])
{
    fd = open(argv[1], O_RDONLY);
    read_and_print(0);
    close(fd);
    fclose(stdout);
    return 0;
}
Example #3
0
int main(int argc, char *argv[])
{
	if(argc == 1){
		fprintf(stderr, "Usage: %s command...\n", *argv);
		return 1;
	}

	enum { read_i = 0, write_i = 1 };

	int child_err[2], child_out[2];
	check(pipe(child_err), "pipe");
	check(pipe(child_out), "pipe");

	long pid = fork();
	check(pid, "fork");

	if(pid == 0){
		close(child_out[read_i]);
		close(child_err[read_i]);

		check(dup2(child_out[write_i], 1), "dup2");
		check(dup2(child_err[write_i], 2), "dup2");

		close(child_out[write_i]);
		close(child_err[write_i]);

		execvp(argv[1], argv + 1);
		check(-1, "exec");
	}

	close(child_err[write_i]);
	close(child_out[write_i]);

	for(;;){
		fd_set fds;

		FD_ZERO(&fds);

		if(child_out[read_i] == -1
		&& child_err[read_i] == -1)
		{
			break;
		}

		int maxfd = 0;

		if(child_out[read_i] != -1){
			FD_SET(child_out[read_i], &fds);
			maxfd = child_out[read_i];
		}

		if(child_err[read_i] != -1){
			FD_SET(child_err[read_i], &fds);
			if(child_err[read_i] > maxfd)
				maxfd = child_err[read_i];
		}

		check(select(maxfd + 1, &fds, NULL, NULL, NULL), "select");

		if(FD_ISSET(child_out[read_i], &fds)){
			read_and_print(&child_out[read_i], "\x1b[1;34m");
		}

		if(FD_ISSET(child_err[read_i], &fds)){
			read_and_print(&child_err[read_i], "\x1b[1;35m");
		}
	}

	return 0;
}