nixCraft Poll

Topics

Programming C: Find out name of a terminal

Posted by Vivek Gite [Last updated: May 6, 2006]

Recently I was writing a small experimental program under GNU/Linux. My tiny application needed input from terminal.

I need to find out name of a terminal. Further, I need to know if a particular file descriptor is a tty device or not.

I found ttyname() function which accepts an open file descriptor as its input argument and returns a pointer to the null-terminated pathname of the terminal device.

But how did I know if descriptor refer to a terminal is tty? Simply use C function isatty(desc) which returns 1 if desc is an open descriptor connected to a terminal and 0 else.

Desc can be any one of the following:

Under normal circumstances every Linux program has three streams opened for it when it starts up, one for input, one for output, and one for printing diagnostic or error messages. These are typically attached to the user's terminal but might instead refer to files or other devices, depending on what the parent process chose to set up.

On program startup, the integer file descriptors associated with the streams stdin, stdout, and stderr are 0, 1, and 2, respectively.

Here is sample C guesstty.c program listing:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
 int t,fd;
 if ( argc == 1 ){
   printf("Syntax: %s 0,1,2\n",argv[0]);
   exit(EXIT_SUCCESS);
 }
 fd = atoi(argv[1]);
 t = isatty(fd);

 if( t )
   printf("fd is %d, which is a tty\n",fd);
 else
   printf("fd is %d, which isn't a tty\n",fd);

 if ( t == 1 ) printf("tty name is %s\n",ttyname(t));

 return EXIT_SUCCESS;
}

The above code can tell when the standard input is redirected to take data from a file or when the data is coming from terminal.

Compile and run program:
[code]$ make guesstty.c[/code]
OR
[code]$ cc guesstty.c -o guesstty [/code]
Sample run:
[code]$ ./guesstty 0[/code]Output:

fd is 0, which is a tty

tty name is /dev/pts/1
[code]$ ./guesstty 0 Output:

fd is 0, which isn't a tty

References:

Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates. You can Email this page to a friend.

You may also be interested in other helpful articles:

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.