Linux?μ?API signalfd??timerfd??eventfd??????
?????lvyilong316 ???????[ 2016/10/24 10:46:35 ] ?????????????? Linux
	?????????μ?fd????linux?????汾??
	????signalfd??2.6.22
	????timerfd??2.6.25
	????eventfd??2.6.22
	????????fd?????壺
	????lsignalfd
	???????????????????????????????????????????????????????????????????????????????signalfd????????????????????????????????????????????read?????????????????????select??poll??epoll??????????С?
	????ltimerfd
	???????????????????????????????????????????????????????????????read????????????????????е???????С?
	????leventfd
	????????????????????????????????????????????????eventfd?????????С??sizeof(uint64_t)??????write??????????????????read??????????????????????eventfd????????????????У?????????????0????п?????????????????ж????
	?????????μ?fd????????м????????????????????п???????????
	????signalfd?漰API??
	???????(???)??????
	????#include <sys/signalfd.h>
	????int signalfd(int fd?? const sigset_t *mask?? int flags);
	????????fd???????-1???????????????????????????????????signalfd????????????
	????????mask?????????
	????????flag?????汾2.6.27??????SFD_NONBLOCK??SFD_CLOEXEC??
	???????????????????????????fd??????2?????read??select(poll??epoll)??close
	????????
	#include <sys/signalfd.h>
	#include <signal.h>
	#include <unistd.h>
	#include <stdlib.h>
	#include <stdio.h>
	#define handle_error(msg) 
	do { perror(msg); exit(EXIT_FAILURE); } while (0)
	int main(int argc?? char *argv[])
	{
	sigset_t mask;
	int sfd;
	struct signalfd_siginfo fdsi;
	ssize_t s;
	sigemptyset(&mask);
	sigaddset(&mask?? SIGINT);
	sigaddset(&mask?? SIGQUIT);
	if (sigprocmask(SIG_BLOCK?? &mask?? NULL) == -1)
	handle_error("sigprocmask");
	sfd = signalfd(-1?? &mask?? 0);
	if (sfd == -1)
	handle_error("signalfd");
	for (;;) {
	s = read(sfd?? &fdsi?? sizeof(struct signalfd_siginfo));
	if (s != sizeof(struct signalfd_siginfo))
	handle_error("read");
	if (fdsi.ssi_signo == SIGINT) {
	printf("Got SIGINT
");
	} else if (fdsi.ssi_signo == SIGQUIT) {
	printf("Got SIGQUIT
");
	exit(EXIT_SUCCESS);
	} else {
	printf("Read unexpected signal
");
	}
	}
	}
	????L17-L21?????????????????sigset_t?У?
	????L24??????signalfd??????????fd????????????????????-1?????????signalfd??????-1??????????????signalfd???????????μ?????
	????L29????????????????????????????????????????????????????
	????timerfd?漰??API
	????#include <sys/timerfd.h>
	????int timerfd_create(int clockid?? int flags);
	????int timerfd_settime(int fd?? int flags?? const struct itimerspec *new_value??struct itimerspec *old_value);
	????int timerfd_gettime(int fd?? struct itimerspec *curr_value);
	????timerfd_create?????????timerfd???????fd??????????2?????read??select(poll??epoll)??close
	????timerfd_settime??????timer????????????????
	????timerfd_gettime????????????
	//??????????????????£?
	struct timespec
	{
	time_t tv_sec; /* Seconds */
	long tv_nsec; /* Nanoseconds */
	};
	struct itimerspec
	{
	struct timespec it_interval; /* Interval for periodic timer */
	struct timespec it_value; /* Initial expiration */
	}
	
??????
					
					???·???
App??С????H5?????????????????Щ??
2024/9/11 15:34:34?????????????????????????
2024/9/10 11:13:49P-One ???????????????????????????????????????
2024/9/10 10:14:12???????????????????????????
2024/9/9 18:04:26??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44
					
			
								
								
								
								
								
								
								
								
								
								
				
sales@spasvo.com