程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中getopt()函數和select()函數的應用辦法

C說話中getopt()函數和select()函數的應用辦法

編輯:關於C++

C說話中getopt()函數和select()函數的應用辦法。本站提示廣大學習愛好者:(C說話中getopt()函數和select()函數的應用辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中getopt()函數和select()函數的應用辦法正文


C說話getopt()函數:剖析敕令行參數
頭文件

#include <unistd.h>

界說函數:

int getopt(int argc, char * const argv[], const char * optstring);

函數解釋: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);
}

履行:

$. /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 稱為描寫詞組, 是用往返傳該描寫詞的讀, 寫或破例的狀態. 底下的宏供給了處置這三種描寫詞組的方法:

  •    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;
};

前往值:假如參數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){...}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved