diff options
Diffstat (limited to 'mqueue_create.c')
-rw-r--r-- | mqueue_create.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/mqueue_create.c b/mqueue_create.c new file mode 100644 index 0000000..492e796 --- /dev/null +++ b/mqueue_create.c @@ -0,0 +1,95 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <getopt.h> +#include <unistd.h> +#include <mqueue.h> +#include <errno.h> + +typedef struct { + char *f_mqname; + int f_verbose; + int f_helper; +} mqueue_params; + +mqueue_params g_params; + +void helper(char *progname) +{ + printf("Usage: %s [OPTS]\n\n" + "Version: 0.0.1 \n" + "-m mqueue name\n" + "-v verbose output\n" + "-h help options\n" + "\n" + , progname); +} + +#define full_mqpath_len 1024 + + +int main(int argc, char **argv) +{ + //stack params + int c,err; + int i; + int mq_fd; + char full_mqpath[full_mqpath_len]; + + + memset(&g_params,0,sizeof(g_params)); + + //process arguments + while ((c = getopt(argc, argv, "m:vh")) != -1) + { + switch (c) + { + case 'm': + g_params.f_mqname = optarg; + break; + case 'v': + g_params.f_verbose = 1; + break; + case 'h': + default: + helper(argv[0]); + exit(1); + } + } + + if (g_params.f_helper) + { + helper(argv[0]); + return 0; + } + + //set mqueue name + if (g_params.f_mqname == NULL) + { + g_params.f_mqname = "/stack-0"; + } + + //compose string + memset(&full_mqpath[0], 0, full_mqpath_len); + snprintf(&full_mqpath[0], full_mqpath_len-1, "%s", g_params.f_mqname); + if (g_params.f_verbose) + { + printf("Full path: %s\n",&full_mqpath); + } + + mq_fd = mq_open(g_params.f_mqname,O_RDWR | O_CREAT, 0666, NULL); + err = errno; + if (mq_fd == -1) + { + if (g_params.f_verbose) + { + printf("ERROR:%d,%s\n",err,strerror(err)); + } + return -1; + } + printf("%s\n",g_params.f_mqname); + + close(mq_fd); + + return 0; +}
\ No newline at end of file |