#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#define PORT 12344
int main(int argc, char** argv) {
int opt;
int server_fd, client_fd, epoll_fd;
int child_pid;
int port = PORT;
char* file = NULL;
/* Argparse */
static struct option long_options[] = {
{"file", required_argument, 0, 'f'},
{"port", optional_argument, 0, 'p'},
{"help", no_argument, 0, 'h'},
{NULL, 0, NULL, 0}
};
while ((opt = getopt_long(argc, argv, "f:p:h", long_options, NULL)) != -1) {
switch (opt) {
case 'f':
printf("file is: %s\n", optarg);
break;
case 'p':
port = atoi(optarg);
// since we will be listening on port > 1024 anyway, 0 is unused
if (!port) {
printf("not a valid port\n");
exit(1);
}
break;
case 'h':
printf("help message\n");
exit(0);
default:
break;
}
}
printf("end\n");
}
我正在尝试构建一个基于TCP的应用程序。我希望程序接受两个参数,一个指定配置文件的文件参数,一个基本上是要侦听的端口号的数字,其他参数工作得很好。但是,每当我尝试使用
--port ABC
选项时,程序都会因分段错误而崩溃。
我在这里缺少什么?
在调用
is_numeric
之前,使用optarg
函数检查atoi
是否只包含数字;如果没有,则打印 "port must be a valid positive number"
并退出。这可以通过确保 optarg
在将其转换为整数之前有效来防止分段错误。