将pthread id作为输入

时间:2014-02-21 12:01:24

标签: c pthreads

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

阅读本文了解更多信息 - What are the valid signatures for C's main() function?。您可以将id pthread作为命令行参数传递给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

答案 1 :(得分:0)

main只有两个有效的原型:

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

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