【问题标题】:Taking pthread id as an input将 pthread id 作为输入
【发布时间】:2014-02-21 12:01:23
【问题描述】:

我们可以将 pthread 的线程 id 作为用户的输入吗? 这是正确的方法吗?

  int main(int argc, pthread_t id, char *argv[])

或者在 void 指针中获取输入,然后将其转换为 long unsigned int?这些都没有给出正确的答案。有没有办法可以做到这一点?

【问题讨论】:

  • 你想做什么?干什么用的?
  • 我希望用户将 pthread id 作为输入提供给另一个程序。

标签: c pthreads


【解决方案1】:

没有。 C 标准为main 指定了两个签名:

int main(void);
int main(int argc, char *argv[]);

阅读更多信息 - What are the valid signatures for C's main() function?。您可以将 pthread 的id 作为命令行参数传递给main,然后在argv 中读取它。 argv 接收可执行文件名称作为第一个参数(./program_name 如下所示),然后是提供的其他参数。所有参数(由空格分隔)都转换为字符串文字。执行你的程序

./program_name 123454 

main 中,你会这样做:

// in main

if(argc > 1) {
    pthread_t id = strtol(argv[1], NULL, 10)  // converts string to decimal int
    if(id == 0) {
        // either no integer was entered in base 10, or 0 was entered
        // handle it
    }
    // do stuff with id
}   

请注意,POSIX 不要求 pthred_t 为整数类型。它甚至可以定义为一个结构。您将需要查看您的 sys/types.h 头文件并查看 pthread_t 是如何实现的。然后你可以根据你认为合适的方式打印或处理它。

包含stdlib.h 库函数原型的头文件strtol。顾名思义,它将字符串转换为给定基数的long int 类型。有关strtol 的更多信息,请阅读此内容-man strtol

【讨论】:

    【解决方案2】:

    main 只有两个有效原型:

    int main(void);
    int main(int, char**);
    

    如果您希望将任何参数传递给main,那么您必须将它们作为参数向量argv 中的字符串传递。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多