嵌入式Linux中多线程下gettid()的使用

w7849516230 2010-08-16 06:23:11
在串口编程中,想在fd0(对应串口打开的文件描述符)有可读数据时,给线程发送一个信号。但是编译的时候老是出现这个错误“undefined reference to gettid”
所用的Linux内核为2.6的。
部分代码如下

struct sigaction saio; /* definition of signal action */

/* install the signal handler before making the device asynchronous */
saio.sa_handler = signal_handler_IO;
//saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);

/* allow the process to receive SIGIO */
fcntl(fd0, F_SETOWN,gettid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
fcntl(fd0, F_SETFL, FASYNC);

头文件中有下面的,感觉能加的都加了。

#include <sys/types.h>
#include <pthread.h>
#include <sys/syscall.h>

...全文
1167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ben大神点C 2011-04-14
  • 打赏
  • 举报
回复

#include <linux/unistd.h>

pid_t gettid(void)
{
return syscall(__NR_gettid);
}

#include <sys/syscall.h>

pid_t gettid(void)
{
return syscall(SYS_gettid);
}

好像这两个都可以。
w7849516230 2010-08-20
  • 打赏
  • 举报
回复 2
都没人管,不过自己解决了。
因为gettid()是Linux他自己的,因此把里面实现函数拷贝出来,写到自己的程序里即可。头文件有
<sys/syscall.h>
实现代码如下:

pid_t gettid()
{
return syscall(SYS_gettid);
}


其实就是这么简单
ketao_78 2010-08-19
  • 打赏
  • 举报
回复
lib

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧