首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当从timerfd_create调用有效的fd时,为什么timerfd_settime使用EBADF失败?

timerfd_create函数用于创建一个定时器文件描述符(timer file descriptor),该文件描述符可以用于设置定时器的参数和获取定时器的状态。timerfd_settime函数用于设置定时器的超时时间和间隔时间。

当timerfd_settime函数使用EBADF(Bad file descriptor)错误失败时,可能有以下几种原因:

  1. 无效的文件描述符:timerfd_settime函数要求传入一个有效的文件描述符,如果传入的文件描述符无效或已关闭,则会返回EBADF错误。在调用timerfd_create函数创建定时器文件描述符后,需要确保该文件描述符有效并且没有被关闭。
  2. 权限不足:如果当前进程没有足够的权限来操作该文件描述符,例如没有写权限或者没有对应的文件操作权限,那么timerfd_settime函数会返回EBADF错误。在使用timerfd_settime函数之前,需要确保当前进程具有足够的权限来操作该文件描述符。
  3. 文件描述符类型不匹配:timerfd_settime函数要求传入的文件描述符必须是定时器文件描述符,如果传入的文件描述符类型不匹配,例如是一个普通文件描述符或者是其他类型的特殊文件描述符,那么timerfd_settime函数会返回EBADF错误。在调用timerfd_create函数创建定时器文件描述符后,需要确保该文件描述符的类型正确。

总结起来,当从timerfd_create调用有效的fd时,timerfd_settime使用EBADF失败可能是因为无效的文件描述符、权限不足或文件描述符类型不匹配。在使用timerfd_settime函数之前,需要确保文件描述符有效、具有足够的权限,并且类型匹配。

相关搜索:当使用numpy 1.13.3时,为什么从scipy导入'comb‘失败?当从同一类调用方法时,有效的弹簧启动无效当使用XMLHttpRequest从函数调用时,函数按预期工作,但当使用EventSource从函数调用时,函数失败。为什么会这样呢?当使用仅公开公钥的证书时,为什么TLS握手失败?当没有有效的匹配器时,使用Mockito是否有办法在方法调用时抛出异常当expo从开发模式切换到生产模式时,我的RSAA调用变得无效,为什么?当mul()是非静态方法时,为什么允许从sum()直接调用mul方法而不使用实例变量当从具有多个元素的事件中调用$(this)时,将使用哪个选择器?获取“错误:加载当前kubeconfig失败,请确认您的kubeconfig有效。”当使用VS代码桥连接到kubernetes时当我使用0作为FILE*从rop chain中的stdin读取时,为什么fgets失败?为什么我的注释标注不会出现?仅当使用自定义图像作为图钉时,标注才有效当从选择框中选择一个项目时,为什么component类中的方法没有被调用?当使用nltk停止词从pandas列的列表中删除停止词时,删除停止词失败。当函数的参数是一个对象时,为什么不能使用Typescript推断方法调用呢?当使用EF6从WebJob查询SQL时,查询失败,因为它试图获得表的多个版本当使用VARBINARY字段时,为什么我的merge (upsert)在HSQLDB数据库中类型不匹配而失败?TensorFlow/Keras:当调用fit时,为什么我得到"ValueError:从float32到uint8的不兼容转换“?当从包中检索传递的参数时,为什么Android Studio警告并建议使用requireArguments()而不是参数!!?当使用异步函数从firestore数据库查询数据时,为什么会得到两种不同的输出?测试在TestLab中失败,但是当从gradle传递runner的参数并在我的androidTest中使用它们时,会传入本地
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux定时器例子

如果对你有帮助,麻烦点个在看或点个赞,感谢~ 文章首发 公众号—— Pou光明 程序中难免会使用到定时器,今天给大家介绍Linux中一种定时器的实现。...Linux下还有很多其他定时的实现,如精确定时等,感兴趣的同志可以再做深入了解。 编程到现在,其实很多工作都是在调用api,还没能完全脱离面向“谷歌”编程的实质,面对这种情形,如何破局呢?...一、api简介 NAME timerfd_create, timerfd_settime, timerfd_gettime -通过文件描述符来告知定时器状态。...int timerfd_settime(int fd, int flags, const struct itimerspec *new_value,...itimerspec *curr_value); timerfd_create() 创建一个新的计时器对象,并返回对应的文件描述符。

3.7K20
  • muduo网络库学习之EventLoop(一):事件循环类图简介和muduo 定时器TimeQueue

    / timerfd_gettime / timerfd_settime 取舍如下: • (计时)只使用gettimeofday 来获取当前时间。...muduo::Timestamp 用一个int64_t 来表示从Epoch 到现在的微秒数,其范围可达上下30 万年。...RVO优化:在linux g++ 会优化,VC++ 在release 模式下会优化,即函数返回对象时不会调用拷贝函数。...TimerQueue 中有多个定时器,一次性的和重复的,事件循环开始EventLoop::loop(),当最早到期定时器超时时,poll() 返回timerfd_ 的可读事件(timerfdChannel...:handleRead(), 在函数内先read  掉timerfd_数据,避免一直触发可读事件,接着遍历TimerQueue中此时所有超时的定时器,调用每个定时器构造时传递的回调函数。

    2K00

    让事件飞——Linux eventfd 原理

    开发者使用eventfd相关的系统调用,需要包含头文件;对于timerfd,则是。...flags可以以下三个标志位的OR结果: EFD_CLOEXEC:FD_CLOEXEC,简单说就是fork子进程时不继承,对于多线程的程序设上这个值不会有错的。...timerfd 对于timerfd,有三个涉及的系统调用接口 int timerfd_create(int clockid, int flags); int timerfd_settime(int fd...考虑一个情景,两个线程几乎同时read请求,那么:两个都会被加入到等待队列中,当第一个抢到自旋锁,返回了大于1的res并重置了count为0,此时它会(在倒数第二个if那里) 第一时间唤醒等待队列中的其他线程...关键在于write函数也有当确认可以成功返回时,主动调用wakeup_locked的过程,这样就能实现write后立即向等待队列通知的效果了。 write操作与read操作过程非常相似,不在此展开。

    6.5K444

    让事件飞 ——Linux eventfd 原理与实践

    开发者使用eventfd相关的系统调用,需要包含头文件;对于timerfd,则是。...flags可以以下三个标志位的OR结果: EFD_CLOEXEC:FD_CLOEXEC,简单说就是fork子进程时不继承,对于多线程的程序设上这个值不会有错的。...timerfd 对于timerfd,有三个涉及的系统调用接口 1int timerfd_create(int clockid, int flags);int timerfd_settime(int fd...考虑一个情景,两个线程几乎同时read请求,那么:两个都会被加入到等待队列中,当第一个抢到自旋锁,返回了大于1的res并重置了count为0,此时它会(在倒数第二个if那里) 第一时间唤醒等待队列中的其他线程...关键在于write函数也有当确认可以成功返回时,主动调用wakeup_locked的过程,这样就能实现write后立即向等待队列通知的效果了。 write操作与read操作过程非常相似,不在此展开。

    5.9K41

    进程间通讯(七).socket(3)

    调用bind的函数之后,该套接字与一个相应的地址关联,发送到这个地址的数据可以通过这个套接字来读取与使用 __addr 指定地址。这是一个地址结构,并且是一个已经经过填写的有效的地址结构。...它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了 __fd 指定处于监听状态的流套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时...同样的,它也可以被设置为NULL 如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接字来完成与客户的通信 返回:非负描述字成功, -1失败 有人从很远的地方通过一个在侦听...,不会阻塞着读,因此需要循环读取) 可能错误 EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时 EBADF:sock不是有效的描述词 ECONNREFUSE:远程主机阻绝网络连接 EFAULT...;==0 对方调用了close API来关闭连接 ;失败,错误原因存于全局变量errno中 EBADF 参数s 非合法的socket处理代码 EFAULT 参数中有一指针指向无法存取的内存空间

    1K20

    网络编程(一).TCP(3)

    调用bind的函数之后,该套接字与一个相应的地址关联,发送到这个地址的数据可以通过这个套接字来读取与使用 __addr 指定地址。这是一个地址结构,并且是一个已经经过填写的有效的地址结构。...它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了 __fd 指定处于监听状态的流套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时...,不会阻塞着读,因此需要循环读取) 可能错误 EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时 EBADF:sock不是有效的描述词 ECONNREFUSE:远程主机阻绝网络连接 EFAULT...;==0 对方调用了close API来关闭连接 ;失败,错误原因存于全局变量errno中 EBADF 参数s 非合法的socket处理代码 EFAULT 参数中有一指针指向无法存取的内存空间...sockaddr结构体的指针 __len sockaddr结构体的字节长度 返回值 : 成功则返回0,失败则返回非0,错误码GetLastError() EBADF 参数sockfd 非合法socket

    42810

    深入剖析Linux网络设计中网络IO的重要角色

    失败时返回的错误码: 错误码 含义 EACCES,EPERM 用户在未启用套接字广播标志的情况下尝试连接到广播地址,或者由于本地防火墙规则,连接请求失败。 EADDRINUSE 本地地址已在使用中。...EBADF 文件描述符不是描述符表中的有效索引。 EconRefuse 没有人监听远程地址。 EFAULT 套接字结构地址在用户的地址空间之外。...成功返回0;失败则返回-1,并设置了全局变量errno。 失败错误码: 错误码 含义 EBADF fd不是有效的打开文件描述符。 EINTR close()调用被信号中断 EIO 发生I/O错误。...当流套接字对等端执行有序关闭时,返回值将为0;不同域(例如UNIX和Internet域)中的数据报套接字允许零长度数据报,当接收到这样的数据报时,返回值为0;如果从流套接字接收的请求字节数为0,则也可以返回值...EAGAIN sockfd引用的套接字以前未绑定到地址,在尝试将其绑定到临时端口时,确定临时端口范围内的所有端口号当前都在使用中。 EBADF 指定的描述符无效。

    11620

    日志录入之旅:深入了解程序日志的编写和执行

    返回值: 成功时,fread()和fwrite()返回读取或写入的项数。此数字等于仅当size为1时传输的字节数。如果发生错误或到达文件结尾,则返回值为短项目计数(或零)。...错误: 这些函数不应失败,也不应设置外部变量errno。(但是,如果fileno()检测到其参数不是有效的流,则必须返回-1并将errno设置为EBADF。)...返回值: 成功时,这些系统调用返回零。出错时,返回-1,并适当设置errno。 错误: 标识 含义 EBADF fd不是有效的打开文件描述符。 EIO 同步期间发生错误。...当输出流未缓冲时,信息在写入目标文件或终端时立即显示;当它被块缓冲时,许多字符被保存并写入一个块;当它是行缓冲字符时,将一直保存到输出换行符或从连接到终端设备的任何流(通常是stdin)读取输入为止。...失败时返回非零(模式无效或无法满足请求)。它可能会在失败时设置errno。 其他函数不返回值。

    10900

    Linux mmap 的作用是什么?

    失败时,mmap()返回MAP_FAILED[其值为(void *)-1], errno 被设为以下的某个值: EACCES:访问出错 EAGAIN:文件已被锁定,或者太多的内存已被锁定 EBADF:fd...不执行预读,只为已存在于内存中的页面建立页表入口。 fd:有效的文件描述词。如果MAP_ANONYMOUS被设定,为了兼容问题,其值应为 -1。 offset:被映射对象内容的偏移。...失败时,munmap返回-1,errno 返回标志和 mmap 一致。 该调用在进程地址空间中解除一个映射关系,addr是调用mmap()时返回的地址,len是映射区的大小。...这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到用户空间内存。...而之后访问数据时发现内存中并无数据而发起的缺页异常过程,可以通过已经建立好的映射关系,只使用一次数据拷贝,就从磁盘中将数据传入内存的用户空间中,供进程使用。

    41530

    RLIMIT_NOFILE设置陷阱:容器应用高频异常的元凶

    尤其是当打开文件描述符的限制(可以通过ulimit -n、RLIMIT_NOFILE或SC_OPEN_MAX查看)被设置得非常高时,这种遍历方式将导致数百万次不必要的系统调用,显著增加了处理时间。...注意,从兼容性考虑,软限制仍保持在1024,传统的UNIX select()调用无法处理大于或等于1024的文件描述符(FD_SET宏不管是否越界以及越界的后果,fd_set也并非严格限制在1024,FD_SET...超过1024的值,会造成越界),因此如果全局提升了软限制,那么在使用select()时可能出现异常(在现代编程中,程序不应该再使用select(),而应该选择poll()/epoll,但遗憾的是这个调用仍然大规模存在...以前文件描述符的限制普遍较低。当Linux内核首次调用用户空间时,RLIMIT_NOFILE的默认值设置为软限制1024和硬限制4096。...以这种方式创建 512k 个文件大约会占用 1.1 GiB 的内存(当至少有一个文件描述符打开时,使用 sysctl vm.drop_caches=3 也不会释放),每个进程打开等量的文件描述符还会额外使用

    55110

    深入Linux CC++ Timer定时器的实现核心原理

    当需要开启一个定时任务的时候,会有一个优雅的、如下形式的接口: typedef void (*callback)(void*); void setTimeout(unsigned int second,...可以根据实际需要,选择合适的定时器容器。 要不要用Timerfd? 开篇的表格里有提到,从Linux2.6.25开始,timerfd系列API,带来了一种全新的定时机制。...每个超时事件独享一个timerfd 如果对于每一个超时事件都用timerfd_create()创建一个对应的fd,放到epoll中统一管理。这样的做法是不合适的。...每增加一个定时事件,都需要额外的3个系统调用: ? 此外,文件描述符还是稀缺的资源,每个进程能够使用的文件描述符是受系统限制的,如果定时器过多,会造成严重的浪费。...额外的系统调用从额外的3个,降到了1个。而且还有改进的空间,只有当栈顶的timeout变化时,才调用timerfd_settime()改变。

    11.2K83

    Linux Reactor网络模型与高效http静态服务器构建

    ,当事件触发时,调用相对应的回调函数。...如果偏移量为NULL,则从当前文件偏移量开始从in fd读取数据,并通过调用更新文件偏移量。count在文件描述符之间复制的字节数返回值:如果传输成功,则返回写入out_ fd的字节数。...请注意,成功调用sendfile()可能会写入比请求更少的字节;如果存在未发送的字节,调用方应准备重试调用。传输失败返回负数。...错误代码:错误码含义EAGAIN已使用ONONBLOCK选择非阻塞I/O,sendfile需要写入阻塞。EBADF未打开输入文件进行读取,或未打开输出文件进行写入。EFAULT地址不正确。...EIO从in_ fd读取时出现未指定错误。ENOMEM内存不足,无法从in_ fd读取。EOVERFLOW计数太大,该操作将导致超过输入文件或输出文件的最大大小。

    8800

    linux网络编程系列(八)--优雅关闭以及如何检测对端已经关闭

    还有一种情况,是说保持连接的某一端想关闭连接了,但它需要确保要发送的数据全部发送完毕以后才调用close,此种情况下也需要使用优雅关闭; 下面我们就来看看怎么优雅的关闭一个socket。 2....); SHUT_RDWR(2) 调用shutdown的那一端不允许在s上进行发送和接收数据; 返回值: 0 成功 -1 失败 返回-1时errno值如下: EBADF 表示s不是一个有效的描述符; ENOTCONN...; ling.l_linger = 0; setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&ling, sizeof(ling)); close(fd...,即等于内核默认情况,close调用会立即返回,可能会也可能不会传输未发送的数据; lonoff为非0,llinger为0,则close关闭时tcp将丢弃保留在发送缓冲区中的任何数据并发送一个RST给对方...如何检测对端已经关闭 一是使用read返回值,如果返回0,并且errno=EAGAIN,则说明连接被对方关闭 使用心跳包,长时间没有接到心跳包时,说明连接断开 使用getsockopt判断连接状态,若是

    3K50

    select,poll,epoll区别

    select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。...callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。...当select()返回时,timeout参数的状态在不同的系统中是未定义的,因此每次调用select()之前必须重新初始化timeout和文件描述符set。...如果提供了timeout,返回值可能是0;错误时返回-1,并且设置errno为下面几个值之一: EBADF 给某个set提供了无效文件描述符。 EINTR 等待时捕获到信号,可以重新发起调用。...返回值和错误代码 成功时,poll()返回结构体中revents域不为0的文件描述符个数;如果在超时前没有任何事件发生,poll()返回0;失败时,poll()返回-1,并设置errno为下列值之一:

    1.4K21

    Postgresql的latch实现中self-pipe trick解决什么问题

    self-pipe trick 1 问题在哪里 当你在使用io multiplexor函数时,例如select,有没有考虑过如果收到信号会发生什么?...收到信号后,系统会跳转到信号处理函数,如果当前正在做一些IO相关的系统调用,例如上面的select,会直接失败返回EINTR。...结果: 1、虽然PG使用sigaction可以定义syscall的行为:SA_RESTART,但这点其实是无法严格保证的。...) 2、信号处理喊出要求比较严格:递归调用场景要求函数是可重入的,或者在信号处理时屏蔽新的信号 3、io多路复用函数和信号处理函数的竞争场景会有并发问题。...3、当信号到来时,信号处理函数在self-pipe[1]中写入1个字节就退出。

    38910
    领券