サンプルコード
main.c
#include <stdio.h>
#include <string.h>
struct command_list {
char *command;
int (*func)(int argc, char *argv[]);
};
static int test_a(int argc, char *argv[])
{
printf("test_a: called\n");
return (0);
}
static int test_b(int argc, char *argv[])
{
printf("test_b: called\n");
return (0);
}
static struct command_list list[] = {
{ .command = "test_a", .func = test_a },
{ .command = "test_b", .func = test_b },
{ .command = NULL, .func = NULL }
};
int main(int argc, char *argv[])
{
int i;
int ret = 0;
for (i = 0; list[i].command != NULL; i++) {
if (strstr(argv[0], list[i].command) != NULL) {
ret = list[i].func(argc, argv);
}
}
return (ret);
}
使い方
$ gcc main.c
$ ln -s a.out test_a
$ ln -s a.out test_b
$ ./test_a
test_a: called
$ ./test_b
test_b: called
まとめ
strcmp
を使っているコードを見かけたが、絶対パスで指定できないのでstrstr
を使いましょう。