• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言中getopt()函数和select()函数的使用方法

C语言中getopt()函数和select()函数的使用方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c getopt,getopt,getopt long,getopt函数,python getopt等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C语言getopt()函数:分析命令行参数
头文件

#include <unistd.h>
</div>

定义函数:

int getopt(int argc, char * const argv[], const char * optstring);
</div>

函数说明:getopt()用来分析命令行参数。
1、参数argc 和argv 是由main()传递的参数个数和内容。
2、参数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);
}
</div>

执行:

$. /getopt -b
option b:b
$. /getopt -c
other option:c
$. /getopt -a
other option :?
$. /getopt -a12345
option a:'12345'
</div>

C语言select()函数:I/O多工机制
定义函数:

int select(int n, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout);
</div>

函数说明:select()用来等待文件描述词状态的改变. 参数n 代表最大的文件描述词加1, 参数readfds、writefds 和exceptfds 称为描述词组, 是用来回传该描述词的读, 写或例外的状况. 底下的宏提供了处理这三种描述词组的方式:

  •    FD_CLR(inr fd, fd_set* set); 用来清除描述词组set 中相关fd 的位
  •    FD_ISSET(int fd, fd_set *set); 用来测试描述词组set 中相关fd 的位是否为真
  •    FD_SET(int fd, fd_set*set); 用来设置描述词组set 中相关fd 的位
  •    FD_ZERO(fd_set *set); 用来清除描述词组set 的全部位

参数 timeout 为结构timeval, 用来设置select()的等待时间, 其结构定义如下:

struct timeval
{
  time_t tv_sec;
  time_t tv_usec;
};
</div>

返回值:如果参数timeout 设为NULL 则表示select ()没有timeout.

错误代码:执行成功则返回文件描述词状态已改变的个数, 如果返回0 代表在描述词状态改变前已超过timeout 时间, 当有错误发生时则返回-1, 错误原因存于errno, 此时参数readfds, writefds, exceptfds 和timeout的值变成不可预测。

  •    EBADF 文件描述词为无效的或该文件已关闭
  •    EINTR 此调用被信号所中断
  •    EINVAL 参数n 为负值.
  •    ENOMEM 核心内存不足

范例:
常见的程序片段:

fs_set readset;
FD_ZERO(&readset);
FD_SET(fd, &readset);
select(fd+1, &readset, NULL, NULL, NULL);
if(FD_ISSET(fd, readset){...}

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言中getopt()函数和select()函数的使用方法

相关文章

  • 2017-05-28C语言入门之指针用法教程
  • 2017-05-28C++多字节字符与宽字节字符相互转换
  • 2017-05-28求子数组最大和的实例代码
  • 2017-05-28Cocos2d-x中获取系统时间和随机数实例
  • 2017-05-28C++实现当前时间动态显示的方法
  • 2017-05-28Linux环境下段错误的产生原因及调试方法小结
  • 2017-05-28c语言内存泄露示例解析
  • 2017-05-28C++中的Lambda表达式详解
  • 2017-05-28用typedef定义类型详细总结
  • 2017-08-27c语言实现bfs状态搜索

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
    • 深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数
    • DSP中浮点转定点运算--举例及编程中的心得
    • 判断本机office安装版本的方法分享
    • POJ2151 Check the difficulty of problems 概率DP
    • C语言求连续最大子数组和的方法
    • C++封装远程注入类CreateRemoteThreadEx实例
    • 浅析C++中结构体的定义、初始化和引用
    • 用c++实现将文本每个单词首字母转换为大写
    • C++ 动态创建按钮及 按钮的消息响应

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有