command line parsing sample in main.c
This commit is contained in:
parent
241f169000
commit
9613da034c
6
Makefile
6
Makefile
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
all: bin/net bin/test
|
||||
all: bin/net bin/test bin/main
|
||||
|
||||
|
||||
bin/net: net.c
|
||||
|
@ -11,5 +11,9 @@ bin/test: test.c
|
|||
mkdir -pv bin
|
||||
gcc -o bin/test test.c
|
||||
|
||||
bin/main: main.c
|
||||
mkdir -pv bin
|
||||
gcc -o bin/main main.c
|
||||
|
||||
clean:
|
||||
rm -rf bin
|
||||
|
|
79
main.c
Normal file
79
main.c
Normal file
|
@ -0,0 +1,79 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define MODE_SERVER 0
|
||||
#define MODE_CLIENT 1
|
||||
|
||||
struct prog_info {
|
||||
int mode;
|
||||
int client_num;
|
||||
int port;
|
||||
} prog_info;
|
||||
|
||||
int parseArgs(struct prog_info *pinfo, int argc, char **argv) {
|
||||
pinfo->mode = MODE_SERVER;
|
||||
pinfo->client_num = 1;
|
||||
pinfo->port = 4711;
|
||||
|
||||
if (argc <= 1) {
|
||||
printf("usage: %s [-s|-c <num>] [-p <port>]\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
int i;
|
||||
for (i=1; i<argc; i++) {
|
||||
if (strncmp(argv[i], "-s", 2) == 0) {
|
||||
pinfo->mode = MODE_SERVER;
|
||||
continue;
|
||||
}
|
||||
if (strncmp(argv[i], "-c", 2) == 0) {
|
||||
pinfo->mode = MODE_CLIENT;
|
||||
if (argc <= i+1) {
|
||||
printf("client number not specified\n");
|
||||
return -2;
|
||||
}
|
||||
pinfo->client_num = (int)strtol(argv[++i], NULL, 10);
|
||||
if (pinfo->client_num <= 0) {
|
||||
printf("invalid client number!\n");
|
||||
return -3;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (strncmp(argv[i], "-p", 2) == 0) {
|
||||
if (argc <= i+1) {
|
||||
printf("port not specified\n");
|
||||
return -4;
|
||||
}
|
||||
pinfo->port = (int)strtol(argv[++i], NULL, 10);
|
||||
if (pinfo->port <= 0 || 65536 <= pinfo->port) {
|
||||
printf("invalid port number!\n");
|
||||
return -5;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
printf("unknown argument %s\n", argv[i]);
|
||||
return -6;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
int ret;
|
||||
if ((ret = parseArgs(&prog_info, argc, argv)) == 0) {
|
||||
|
||||
printf("port: %d\n", prog_info.port);
|
||||
if (prog_info.mode == MODE_SERVER) {
|
||||
printf("runnin in SERVER mode\n");
|
||||
// ...
|
||||
} else {
|
||||
printf("running in CLIENT mode, using client number %d\n", prog_info.client_num);
|
||||
// ...
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user