首页
学习
活动
专区
工具
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请求,那么:两个都会被加入到等待队列中,第一个抢到自旋锁,返回了大于1res并重置了count为0,此时它会(在倒数第二个if那里) 第一间唤醒等待队列中其他线程...关键在于write函数也有当确认可以成功返回,主动调用wakeup_locked过程,这样就能实现write后立即向等待队列通知效果了。 write操作与read操作过程非常相似,不在此展开。

    6.4K444

    让事件飞 ——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请求,那么:两个都会被加入到等待队列中,第一个抢到自旋锁,返回了大于1res并重置了count为0,此时它会(在倒数第二个if那里) 第一间唤醒等待队列中其他线程...关键在于write函数也有当确认可以成功返回,主动调用wakeup_locked过程,这样就能实现write后立即向等待队列通知效果了。 write操作与read操作过程非常相似,不在此展开。

    5.4K41

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

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

    1K20

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

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

    42510

    深入剖析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 指定描述符无效。

    10520

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

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

    9300

    Linux mmap 作用是什么?

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

    38330

    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 也不会释放),每个进程打开等量文件描述符还会额外使用

    32210

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

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

    7700

    深入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()改变。

    10.9K83

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

    还有一种情况,是说保持连接某一端想关闭连接了,但它需要确保要发送数据全部发送完毕以后才调用close,此种情况下也需要使用优雅关闭; 下面我们就来看看怎么优雅关闭一个socket。 2....); SHUT_RDWR(2) 调用shutdown那一端不允许在s上进行发送和接收数据; 返回值: 0 成功 -1 失败 返回-1errno值如下: 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

    【项目设计】仿 muduo 库实现 OneThreadOneEventLoop 式并发服务器

    CLOCK_MONOTONIC - 系统开机到现在时间,是⼀种相对时间 flags: 0 - 默认阻塞 返回值:timerfd操作和普通文件操作是一样,因此timerfd_create返回一个文件描述符...int timerfd_settime(int fd, int flags, struct itimerspec *new, struct itimerspec *old); fd: timerfd_create...eventfd 通常与 epoll 搭配使用 – 通过 epoll 进行描述符事件监控,描述符有事件就绪就读取 eventfd 中值,然后进行事件处理。...// 主EventLoop(主Reactor主线程),线程数量为0连接所有操作都在主线程中执行 std::vector _threads; // 保存所有的...LoopThread std::vector _loops; // 保存所有的EventLoop,线程数量大于0_threads中为EventLoop分配线程

    63312

    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
    领券