1、自己手动简单处理
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
enum http_parser_type {
HTTP_REQUEST,
HTTP_RESPONSE,
HTTP_BOTH
};
void usage(const char* name) {
fprintf(stderr,
"Usage: %s $type $filename\n"
" type: -x, where x is one of {r,q,b}\n"
" parses file as a Response, reQuest, or Both\n",
name);
exit(EXIT_FAILURE);
}
int main(int argc, const char * argv[]) {
enum http_parser_type file_type;
if (argc != 3) {
usage(argv[0]);
}
const char* type = argv[1];
if (type[0] != '-') {
usage(argv[0]);
}
switch (type[1]) {
case 'r':
file_type = HTTP_RESPONSE;
break;
case 'q':
file_type = HTTP_REQUEST;
break;
case 'b':
file_type = HTTP_BOTH;
break;
default:
usage(argv[0]);
}
const char* filename = argv[2];
FILE* file = fopen(filename, "r");
if (file == NULL) {
perror("fopen");
goto fail;
}
return EXIT_SUCCESS;
fail:
fclose(file);
return EXIT_FAILURE;
}
2、使用getopt函数
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void usage(const char* name) {
fprintf(stderr,
"Usage: %s $type $filename\n"
" type: -x, where x is one of {r,q,b}\n"
" parses file as a Response, reQuest, or Both\n",
name);
exit(EXIT_FAILURE);
}
int main (int argc, char *argv[])
{
int ch;
if (argc != 3)
{
usage(argv[0]);
}
while((ch = getopt(argc, argv, "r:b:q:")) != -1)
{
switch(ch)
{
case 'r':
printf("The file name is:%s\n", optarg);
break;
case 'q':
printf("The file name is:%s\n", optarg);
break;
case 'b':
printf("The file name is:%s\n", optarg);
break;
default:
usage(argv[0]);
break;
}
}
return EXIT_SUCCESS;
}