Path: blob/main/tests/sys/kern/pipe/pipe_reverse2_test.c
39488 views
/*-1* Copyright (c) 2010 Jilles Tjoelker2* All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7* 1. Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9* 2. Redistributions in binary form must reproduce the above copyright10* notice, this list of conditions and the following disclaimer in the11* documentation and/or other materials provided with the distribution.12*13* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND14* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE15* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE16* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE17* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL18* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS19* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)20* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT21* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY22* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF23* SUCH DAMAGE.24*/2526#include <sys/select.h>2728#include <err.h>29#include <stdio.h>30#include <unistd.h>3132/*33* Check that pipes can be selected for writing in the reverse direction.34*/35int36main(void)37{38int pip[2];39fd_set set;40int n;4142if (pipe(pip) == -1)43err(1, "FAIL: pipe");4445FD_ZERO(&set);46FD_SET(pip[0], &set);47n = select(pip[1] + 1, NULL, &set, NULL, &(struct timeval){ 0, 0 });48if (n != 1)49errx(1, "FAIL: select initial reverse direction");5051n = write(pip[0], "x", 1);52if (n != 1)53err(1, "FAIL: write reverse direction");5455FD_ZERO(&set);56FD_SET(pip[0], &set);57n = select(pip[1] + 1, NULL, &set, NULL, &(struct timeval){ 0, 0 });58if (n != 1)59errx(1, "FAIL: select reverse direction after write");6061printf("PASS\n");6263return (0);64}656667