int main(int argc , char *argv[])
{
int c;
int sock;
struct sockaddr_in server;
char message[1000] , server_reply[2000];
FILE *log;
//int cp;
int port_no;
while(1)
{
static struct option long_options[]=
{
{"port", required_argument, 0, 'p'},
{"log", required_argument, 0, 'l'},
};
c = getopt_long(argc, argv, "p:l:",long_options,NULL);
if(c==-1)
{
break;
}
switch (c)
{
case 'p':
if (optarg)
{
port_no = atoi(optarg);
}
else
{
fprintf(stderr,"Usage --port= port number\n");
}
break;
case 'l':
if(optarg)
{
log = fopen(optarg,"w");
}
else
{
fprintf(stderr,"Usage --log= logfilename\n");
}
break;
case '?':
//fprintf(stderr,"Argument no recognised\n");
break;
}
}
}
当我运行./client --port --log
时,它将--log
识别为端口号参数,当我运行./client --log --port
时,它将--port
识别为日志文件参数并创建一个文件名为--port
。
为什么会这样? --
中的getopt_long()
不是特殊字符吗?
答案 0 :(得分:2)
port
和log
都声明为required_argument
。因此,它看起来是--log
背后的论点,因此--port
被视为arg
而不是option
。
正确的用法类似于./client --port 8080 --log file.log
。