C语言中getopt()函数和select()函数的使用方法
C语言getopt()函数:分析命令行参数 #include <unistd.h> 定义函数: int getopt(int argc,char * const argv[],const char * optstring); 函数说明:getopt()用来分析命令行参数。 此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。 如果选项字符串里的字母后接着冒号":",则表示还有相关的参数,全域变量optarg 即会指向此额外参数。 返回值:如果找到符合的参数则返回此参数字母,如果参数不包含在参数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 :bn"); break; default: printf("other option :%cn",ch); } printf("optopt +%cn",optopt); } 执行: $. /getopt -b option b:b $. /getopt -c other option:c $. /getopt -a other option :? $. /getopt -a12345 option a:'12345' C语言select()函数:I/O多工机制 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()的等待时间,其结构定义如下: struct timeval { time_t tv_sec; time_t tv_usec; }; 返回值:如果参数timeout 设为NULL 则表示select ()没有timeout. 错误代码:执行成功则返回文件描述词状态已改变的个数,如果返回0 代表在描述词状态改变前已超过timeout 时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds 和timeout的值变成不可预测。
范例: fs_set readset; FD_ZERO(&readset); FD_SET(fd,&readset); select(fd+1,&readset,NULL,NULL); if(FD_ISSET(fd,readset){...} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |