1/* 2 * Copyright 2003-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <stdio.h> 8#include <string.h> 9#include <unistd.h> 10#include <termios.h> 11 12#include <syscalls.h> 13 14 15/** isatty - is the given file descriptor bound to a terminal device? 16 * a simple call to fetch the terminal control attributes suffices 17 * (only a valid tty device will succeed) 18 */ 19 20int 21isatty(int fd) 22{ 23 struct termios termios; 24 25 return _kern_ioctl(fd, TCGETA, &termios, sizeof(struct termios)) == B_OK; 26 // we don't use tcgetattr() here in order to keep errno unchanged 27} 28 29 30/** returns the name of the controlling terminal */ 31 32char * 33ctermid(char *s) 34{ 35 static char defaultBuffer[L_ctermid]; 36 char *name = ttyname(STDOUT_FILENO); 37 // we assume that stdout is our controlling terminal... 38 39 if (s == NULL) 40 s = defaultBuffer; 41 42 return strcpy(s, name ? name : ""); 43} 44 45 46int 47tcsetpgrp(int fd, pid_t pgrpid) 48{ 49 return ioctl(fd, TIOCSPGRP, &pgrpid); 50} 51 52 53pid_t 54tcgetpgrp(int fd) 55{ 56 pid_t foregroundProcess; 57 int status = ioctl(fd, TIOCGPGRP, &foregroundProcess); 58 if (status == 0) 59 return foregroundProcess; 60 61 return -1; 62} 63