字符串C上的getopt()

时间:2015-01-26 22:01:34

标签: c linux getopt

如何使用C?

在字符串上实现getopt()相似的函数

我目前正在应用此

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <strings.h>
#include <fcntl.h>


int main(int argc, char **argv){

     int ch,fd;
     char *ip;
     char *port;
     char *user;
     char message[100]; 
     message = "_connect -i 127.0.0.1 -p 1234 -u hello1";

     while ((ch = getopt(argc, argv, "i:p:u:")) != -1) {
             switch (ch) {
             case 'i':
                     if ((fd = open(optarg, O_RDONLY, 0)) < 0) {
                             printf("my ip is: %s\n", optarg);

                             //ip = optarg;
                     }
                     break;

            case 'p':
                    if ((fd = open(optarg, O_RDONLY, 0)) < 0) {
                             printf("my port number is: %s\n", optarg);
                             //port = optarg;

                     }
                     break;

            case 'u':
                    if ((fd = open(optarg, O_RDONLY, 0)) < 0) {
                             printf("my name is: %s\n", optarg);
                             //user = optarg;

                     }
                     break;
             default:break;
             }
     }
     argc -= optind;
     argv += optind;
     return 0;
  }

我需要使消息完全作为参数,getopt函数才能接收分离的值

1 个答案:

答案 0 :(得分:0)

首先使用strtok(或strtok_r)将C字符串转换为字符串数组。然后将其传递给getoptgetopt仅使用argcargv,因为这是您传递的内容。

如果你需要关注引用(想想是否

hello "foo bar" baz

有三个参数或两个),那么您可能需要查看wordexp,或者如果您使用的是glibg-shell-parse-argv