diff --git a/Makefile b/Makefile index 95a70e1..e49e931 100644 --- a/Makefile +++ b/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 diff --git a/main.c b/main.c new file mode 100644 index 0000000..47e9f59 --- /dev/null +++ b/main.c @@ -0,0 +1,79 @@ +#include +#include +#include + +#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 ] [-p ]\n", argv[0]); + return -1; + } + int i; + for (i=1; imode = 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; +} +