终端控制篇
getopt
分析命令行参数
头文件
#include <unistd.h>
函数原型
int getopt(int argc, char * const argv[], const char *optstring);
说明:getopt() 用来分析命令行参数。参数 argc 和 argv 是由 main() 传递的参数个数和内容。参数 optstring 则代表欲处理的选项字符串。此函数会返回在 argv 中下一个的选项字母,此字母会对应参数 optstring 中的字母。如果选项字符串里的字母后接着冒号
:
,则表示还有相关的参数,全局变量 optarg 即会指向此额外参数。如果 getopt() 找不到符合的参数则会输出错误信息,并将全局变量 optopt 设为?
字符,如果不希望 getopt() 输出错误信息,则只要将全局变量 opterr 设为 0 即可。返回值:如果找到符合的参数则返回此参数字母,如果参数不在参数 optstring 的选项字母则返回
?
字符,分析结束则返回 -1。
示例
#include <stdio.h>
#include <unistd.h>
int main(int argc,char **argv)
{
int ch;
opterr = 0;
while((ch = getopt(argc, argv, "a:bcde")) != -1)
switch(ch)
{
case 'a':
printf("option a:'%s'\n", optarg);
break;
case 'b':
printf("option b:b\n");
break;
default:
printf("other option:%c\n", ch);
}
printf("optopt +%c\n", optopt);
return 0;
}
执行
$ ./a.out -a 12345 -b -c -d -e -f
option a:'12345'
option b:b
other option:c
other option:d
other option:e
other option:?
optopt +f
isatty
判断文件描述符是否为终端机
头文件
#include <unistd.h>
函数原型
int isatty(int desc);
说明:如果参数 desc 所代表的文件描述符为一终端机则返回 1,否则返回 0。
返回值:如果文件为终端机则返回 1,否则返回 0。
相关函数:ttyname
示例
参考 ttyname()
ttyname
返回一终端机名称
头文件
#include <unistd.h>
函数原型
char * ttyname(int desc);
说明:如果参数 desc 所代表的文件描述符为一终端机,则会将此终端机名称由一字符串指针返回,否则返回 NULL。
返回值:如果成功则返回指向终端机名称的字符串指针,有错误情況发生时则返回 NULL。
相关函数:isatty
示例
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd;
char *file = "/dev/tty";
fd = open(file, O_RDONLY);
printf("%s", file);
if (isatty(fd)) {
printf(" is a tty\n");
printf("ttyname = %s \n", ttyname(fd));
}
else {
printf(" is not a tty\n");
}
close(fd);
return 0;
}
执行
/dev/tty is a tty
ttyname = /dev/tty