UNIX环境高级编程读书笔记

 

2.

名称:

cfgetispeed/cfgetospeed/cfsetispeed/cfsetospeed

功能:

波特率函数

头文件:

#include <termios.h>

函数原形:

speed_t cfgetispeed(const struct termios *termptr);

speed_t cfgetospeed(const struct termios *termptr);

int cfsetispeed(struct termios *termotr,speed_t speed);

int cfsetospeed(struct termios *termotr,speed_t speed);

参数:

 

返回值:

返回波特率( cfgetispeed cfgetospeed

若成功返回0,若出错则返回-1 cfsetispeed cfsetospeed

       波特率是一个以往采用的术语,现在它指的是“位/秒”。虽然大多数终端设备对输入和输出使用同一波特率,但是只要硬件许可,可以将它们设置为两个不同值。

 

3

名称:

tcdrain/tcflow/tcflush/tcsendbreak

功能:

行控制函数

头文件:

#include <termios.h>

函数原形:

int tcdrain(int filedes);

int tcglow(int files,int action);

int tcflush(int files,int queue);

int tcsendbread(int filedes,int duration);

参数:

filedes     终端I/O所对应的文件的文件描述符

返回值:

若成功返回0,若出错则返回-1

       tcdrain函数等待所有输出都被发送。tcflow用于对输入和输出流控制进行控制。action参数应当是下列四个值:

       TCOOFF        输出被挂起

       TCOON         以前被挂起的输出被重新启动

       TCIOFF     系统发送一个STOP字符。这将使终端设备暂停发送数据。

       TCION          系统发送一个START字符。这将使终端恢复发送数据。

tcflush函数刷清输入缓存或输出缓存。queue参数应当是下列三个参数之一:

       TCIFLUSH     刷清输入队列

       TCOFLUSH    刷清输出队列

       TCIOFLUSH  刷清输入、输出队列

tcsendbread函数在一个指定的时间区间内发送连续的0位流。若duration参数为0,则此种发送延续0.25~0.5秒之间。

 

4

名称:

ctermid(char *ptr);

功能:

决定终端的名字

头文件:

#include <stdio.h>

函数原形:

 char *ctermid(char *ptr);

参数:

ptr  存放控制终端名的数组

返回值:

若成功则返回指向控制终端名的指针,若出错则返回指向空字符串的指针。

       ctermid可却定终端的名字。

       如果ptr是非空,则它被认为是一个指针,指向长度至少为L_ctermid字节的数组,进程的控制终端名存放在该数组中。参数L_ctermid定义在<stdio.h>中。若ptr是是一个空指针,则该函数为数组分配空间。同样,进程的控制终端名存放在该数组中。

大部分UNIX系统中,控制终端的名称是/dev/tty/。所以此函数的主要作用是帮助提高向其他操作系统的可移植性。

 

5

名称:

isatty

功能:

判断文件是不是一个终端设备文件

头文件:

#include <unistd.h>

函数原形:

int isatty(int filedes);

参数:

filedes     终端I/O所对应的文件的文件描述符

返回值:

若终端设备则为1,否则为0

isatty函数用于判断文件是不是一个终端设备。下面是实例:

 

/*11_2.c*/

#include <unistd.h>

 

int main(void)

{

printf(“fd 0:%s/n”,isatty(0)?”tty”:”not a tty”);

printf(“fd 1:%s/n”,isatty(1)?”tty”,”not a tty”);

printf(“fd2:%s/n”,isatty(2)?”tty”,”not a tty”);

exit(0);

}

 

下面是运行结果:

#./11_2

fd 0:tty

fd 1:tty

fd 2:tty

#./11_2 </etc/passwd 2>/dev/null

fd 0:not a tty

fd: 1:tty

fd2:not a tty

 

6

名称:

ttyname

功能

判断是不是终端设备文件如果是打印路径名

头文件

#include <unistd.h>

函数原形

char *ttyname(int filedes);

参数

filedes     终端I/O所对应的文件的文件描述符

返回值:

指向终端路径名的指针,若出错则为NULL

       每个文件系统有一个唯一的设备号(stat结构中的st_dev字段),文件系统每个目录项有唯一的i节点号(stat结构中的st_ino字段)。ttyname会读/dev目录,寻找具有相同设备号和i节点编号的表项。在此函数中设定当找到一个匹配的设备号和匹配的i节点号时,就找到了所希望的目录项。

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

 

int main(void)

{

char *name;

 

if(isatty(0))

{

    name=ttyname(0);

    if(name==NULL)

        name=”undefined”;

    printf(“fd 0:%s/n”,name);

}

else

    printf(“not a tty/n”);

 

if(isatty(1))

{

    name=ttyname(1);

    if(name==NULL)

        name=”undefined”);

    printf(“fd 1:%s/n”,name);

}

else

    printf(“not a tty/n”);

 

if(isatty(2))

{

    name=ttyname(2);

    if(name==NULL)

        name=”undefined”);

    printf(“not a tty/n”);

}

else

    printf(“not a tty/n”);

exit(0);

}

#./11_3

fd 0: /dev/tty1

fd 1: /dev/tty1

fd 2: /dev/tty1

#./11_3 </dev/console 2>/dev/null

fd 0: /dev/console

fd1: /dev/tty1

not a tty

你可能感兴趣的:(编程,unix,struct,null,读书,终端)