函数介绍
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> |
执行 | $./getopt –b |
| |
isatty(判断文件描述词是否是为终端机) | |
相关函数 | ttyname |
表头文件 | #include<unistd.h> |
定义函数 | int isatty(int desc); |
函数说明 | 如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。 |
返回值 | 如果文件为终端机则返回1,否则返回0。 |
范例 | 参考ttyname()。 |
| |
select(I/O多工机制) | |
表头文件 | #include<sys/time.h> |
定义函数 | int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); |
函数说明 | select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds 和exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。底下的宏提供了处理这三种描述词组的方式: |
参数 | timeout为结构timeval,用来设置select()的等待时间,其结构定义如下 |
返回值 | 如果参数timeout设为NULL则表示select()没有timeout。 |
错误代码 | 执行成功则返回文件描述词状态已改变的个数,如果返回0代表在描述词状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。 |
范例 | 常见的程序片段:fs_set readset; |
| |
ttyname(返回一终端机名称) | |
相关函数 | Isatty |
表头文件 | #include<unistd.h> |
定义函数 | char * ttyname(int desc); |
函数说明 | 如果参数desc所代表的文件描述词为一终端机,则会将此终端机名称由一字符串指针返回,否则返回NULL。 |
返回值 | 如果成功则返回指向终端机名称的字符串指针,有错误情况发生时则返回NULL。 |
范例 | #include<unistd.h> |
执行 | /dev/tty is a tty |
小试牛刀
这里我们演示另外一个函数。
char*getpass( const char *prompt);
读写用户输入,屏幕不回显
getpass用于从键盘读取用户输入,但屏幕不回显。
参数prompt为屏幕提示字符。
函数返回值为用户键盘输入的字符串。
流程设计
预先设定一个密码
我们利用getpass要求用户输入密码
我们对密码和键盘输入的密码进行一个比对
若是正确显示输入正确
否则 提示用户输入错误
代码实现
#include <stdio.h> #include <unistd.h> #include <string.h> int main(void) { //预先设定一个密码 char password[] = "itcastccppno1"; //我们利用getpass要求用户输入密码 //char *getpass( const char *prompt); char *input = getpass("请输入用户密码:\n"); printf("\n你输入的是:%s\n",input); //我们对密码和键盘输入的密码进行一个比对 if (strcmp(input,password) == 0) { // 若是正确显示输入正确 printf("输入正确\n"); } else //否则 提示用户输入错误 printf("输入错误\n"); return 0; }
平台效果
在RHEL7上
在Solaris上
在MAC上