nDGLinux联盟
| nDGLinux联盟 getopt(分析命令行参数) |
相关函数 | nDGLinux联盟
|
表头文件 | #include<unistd.h>nDGLinux联盟
|
定义函数 | int getopt(int argc,char * const argv[ ],const char * optstring);nDGLinux联盟
|
函数说明 | getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。nDGLinux联盟
|
返回值 | 如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1。nDGLinux联盟
|
范例 | #include<stdio.h>nDGLinux联盟 #include<unistd.h>nDGLinux联盟 int main(int argc,char **argv)nDGLinux联盟 {nDGLinux联盟 int ch;nDGLinux联盟 opterr = 0;nDGLinux联盟 while((ch = getopt(argc,argv,”a:bcde”))!= -1)nDGLinux联盟 switch(ch)nDGLinux联盟 {nDGLinux联盟 case ‘a’:nDGLinux联盟 printf(“option a:’%s’n”,optarg);nDGLinux联盟 break;nDGLinux联盟 case ‘b’:nDGLinux联盟 printf(“option b :bn”);nDGLinux联盟 break;nDGLinux联盟 default:nDGLinux联盟 printf(“other option :%cn”,ch);nDGLinux联盟 }nDGLinux联盟 printf(“optopt +%cn”,optopt);nDGLinux联盟 }nDGLinux联盟
|
执行 | $./getopt –bnDGLinux联盟 option b:bnDGLinux联盟 $./getopt –cnDGLinux联盟 other option:cnDGLinux联盟 $./getopt –anDGLinux联盟 other option :?nDGLinux联盟 $./getopt –a12345nDGLinux联盟 option a:’12345’nDGLinux联盟
|
| |
nDGLinux联盟
| nDGLinux联盟 isatty(判断文件描述词是否是为终端机) |
相关函数 | ttynamenDGLinux联盟
|
表头文件 | #include<unistd.h>nDGLinux联盟
|
定义函数 | int isatty(int desc);nDGLinux联盟
|
函数说明 | 如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。nDGLinux联盟
|
返回值 | 如果文件为终端机则返回1,否则返回0。nDGLinux联盟
|
范例 | 参考ttyname()。nDGLinux联盟
|
| |
nDGLinux联盟
| nDGLinux联盟 select(I/O多工机制) |
表头文件 | #include<sys/time.h>nDGLinux联盟 #include<sys/types.h>nDGLinux联盟 #include<unistd.h>nDGLinux联盟
|
定义函数 | int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);nDGLinux联盟
|
函数说明 | select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds 和exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。底下的宏提供了处理这三种描述词组的方式:nDGLinux联盟 FD_CLR(inr fd,fd_set* set);用来清除描述词组set中相关fd 的位nDGLinux联盟 FD_ISSET(int fd,fd_set *set);用来测试描述词组set中相关fd 的位是否为真nDGLinux联盟 FD_SET(int fd,fd_set*set);用来设置描述词组set中相关fd的位nDGLinux联盟 FD_ZERO(fd_set *set); 用来清除描述词组set的全部位nDGLinux联盟
|
参数 | timeout为结构timeval,用来设置select()的等待时间,其结构定义如下nDGLinux联盟 struct timevalnDGLinux联盟 {nDGLinux联盟 time_t tv_sec;nDGLinux联盟 time_t tv_usec;nDGLinux联盟 };nDGLinux联盟
|
返回值 | 如果参数timeout设为NULL则表示select()没有timeout。nDGLinux联盟
|
错误代码 | 执行成功则返回文件描述词状态已改变的个数,如果返回0代表在描述词状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。nDGLinux联盟 EBADF 文件描述词为无效的或该文件已关闭nDGLinux联盟 EINTR 此调用被信号所中断nDGLinux联盟 EINVAL 参数n 为负值。nDGLinux联盟 ENOMEM 核心内存不足nDGLinux联盟
|
范例 | 常见的程序片段:fs_set readset;nDGLinux联盟 FD_ZERO(&readset);nDGLinux联盟 FD_SET(fd,&readset);nDGLinux联盟 select(fd+1,&readset,NULL,NULL,NULL);nDGLinux联盟 if(FD_ISSET(fd,readset){……}nDGLinux联盟
|
| |
nDGLinux联盟
| nDGLinux联盟 ttyname(返回一终端机名称) |
相关函数 | IsattynDGLinux联盟
|
表头文件 | #include<unistd.h>nDGLinux联盟
|
定义函数 | char * ttyname(int desc);nDGLinux联盟
|
函数说明 | 如果参数desc所代表的文件描述词为一终端机,则会将此终端机名称由一字符串指针返回,否则返回NULL。nDGLinux联盟
|
返回值 | 如果成功则返回指向终端机名称的字符串指针,有错误情况发生时则返回NULL。nDGLinux联盟
|
范例 | #include<unistd.h>nDGLinux联盟 #include<sys/types.h>nDGLinux联盟 #include <sys/stat.h>nDGLinux联盟 #include<fcntl.h>nDGLinux联盟 main()nDGLinux联盟 {nDGLinux联盟 int fd;nDGLinux联盟 char * file = “/dev/tty”;nDGLinux联盟 fd = open (fiel,O_RDONLY);nDGLinux联盟 printf(“%s”,file);nDGLinux联盟 if(isatty(fd)){nDGLinux联盟 printf(“is a tty.n”);nDGLinux联盟 printf(“ttyname = %s n”,ttyname(fd));nDGLinux联盟 }nDGLinux联盟 else printf(“ is not a ttyn”);nDGLinux联盟 close(fd);nDGLinux联盟 }nDGLinux联盟
|
执行 | /dev/tty is a ttynDGLinux联盟 ttyname = /dev/ttynDGLinux联盟
|
| nDGLinux联盟
|