📄 16.html
字号:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<table width="100%">
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc293></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
getopt(分析命令行参数) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int getopt(int argc,char * const argv[ ],const
char * optstring);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring
则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg
即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<stdio.h><br>
#include<unistd.h><br>
int main(int argc,char **argv)<br>
{<br>
int ch;<br>
opterr = 0;<br>
while((ch = getopt(argc,argv,”a:bcde”))!= -1)<br>
switch(ch)<br>
{<br>
case ‘a’:<br>
printf(“option a:’%s’\n”,optarg);<br>
break;<br>
case ‘b’:<br>
printf(“option b :b\n”);<br>
break;<br>
default:<br>
printf(“other option :%c\n”,ch);<br>
}<br>
printf(“optopt +%c\n”,optopt);<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 执行 </font> </div>
</td>
<td> <font face='宋体' size='2'> $./getopt –b<br>
option b:b<br>
$./getopt –c<br>
other option:c<br>
$./getopt –a<br>
other option :?<br>
$./getopt –a12345<br>
option a:’12345’<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc294></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
isatty(判断文件描述词是否是为终端机) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> ttyname<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int isatty(int desc);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果文件为终端机则返回1,否则返回0。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> 参考ttyname()。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc295></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
select(I/O多工机制) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<sys/time.h><br>
#include<sys/types.h><br>
#include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int select(int n,fd_set * readfds,fd_set *
writefds,fd_set * exceptfds,struct timeval * timeout);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds
和exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。底下的宏提供了处理这三种描述词组的方式:<br>
FD_CLR(inr fd,fd_set* set);用来清除描述词组set中相关fd 的位<br>
FD_ISSET(int fd,fd_set *set);用来测试描述词组set中相关fd 的位是否为真<br>
FD_SET(int fd,fd_set*set);用来设置描述词组set中相关fd的位<br>
FD_ZERO(fd_set *set); 用来清除描述词组set的全部位<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 参数 </font> </div>
</td>
<td> <font face='宋体' size='2'> timeout为结构timeval,用来设置select()的等待时间,其结构定义如下<br>
struct timeval<br>
{<br>
time_t tv_sec;<br>
time_t tv_usec;<br>
};<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果参数timeout设为NULL则表示select()没有timeout。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
</td>
<td> <font face='宋体' size='2'> 执行成功则返回文件描述词状态已改变的个数,如果返回0代表在描述词状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。<br>
EBADF 文件描述词为无效的或该文件已关闭<br>
EINTR 此调用被信号所中断<br>
EINVAL 参数n 为负值。<br>
ENOMEM 核心内存不足<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> 常见的程序片段:fs_set readset;<br>
FD_ZERO(&readset);<br>
FD_SET(fd,&readset);<br>
select(fd+1,&readset,NULL,NULL,NULL);<br>
if(FD_ISSET(fd,readset){……}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc296></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
ttyname(返回一终端机名称) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> Isatty<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> char * ttyname(int desc);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果参数desc所代表的文件描述词为一终端机,则会将此终端机名称由一字符串指针返回,否则返回NULL。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 如果成功则返回指向终端机名称的字符串指针,有错误情况发生时则返回NULL。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
#include<sys/types.h><br>
#include <sys/stat.h><br>
#include<fcntl.h><br>
main()<br>
{<br>
int fd;<br>
char * file = “/dev/tty”;<br>
fd = open (fiel,O_RDONLY);<br>
printf(“%s”,file);<br>
if(isatty(fd)){<br>
printf(“is a tty.\n”);<br>
printf(“ttyname = %s \n”,ttyname(fd));<br>
}<br>
else printf(“ is not a tty\n”);<br>
close(fd);<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 执行 </font> </div>
</td>
<td> <font face='宋体' size='2'> /dev/tty is a tty<br>
ttyname = /dev/tty<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
</div>
</td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -