linux 下阻塞睡眠等待poll函数简单实现
来源:互联网 发布:c语言for循环嵌套详解 编辑:程序博客网 时间:2024/06/03 01:41
linux 下阻塞睡眠等待poll函数简单实现
/* int poll(struct pollfd *fds, nfds_t nfds, int timeout); */
/*
struct pollfd {
int fd; // file descriptor
short events; // requested events
short revents; // returned events
};
*/
/*
The bits that may be set/returned in events and revents are defined in
<poll.h>:
POLLIN: There is data to read.(数据可读)
POLLOUT:Writing now will not block.(数据可读)
*/
标签: <无>
代码片段(1)
[文件] main.c ~ 2KB 下载(18)
001
#include <string.h>
002
#include <stdio.h>
003
#include <sys/types.h>
004
#include <sys/stat.h>
005
#include <fcntl.h>
006
#include <errno.h>
007
#include <poll.h>
008
009
/* int poll(struct pollfd *fds, nfds_t nfds, int timeout); */
010
011
/*
012
struct pollfd {
013
int fd; // file descriptor
014
short events; // requested events
015
short revents; // returned events
016
};
017
*/
018
/*
019
The bits that may be set/returned in events and revents are defined in
020
<poll.h>:
021
POLLIN: There is data to read.(数据可读)
022
POLLOUT:Writing now will not block.(数据可读)
023
*/
024
025
#define OPEN_FLAGS O_RDWR|O_CREAT
026
#define OPEN_MODE 00777
027
028
#define W_DATA "howaylee"
029
030
int
main(
int
argc,
char
* argv[])
031
{
032
int
ret = -1;
033
int
fd1 = -1;
034
int
fd2 = -1;
035
036
char
r_buf[12] = {0};
037
038
struct
pollfd fds[2] = {0};
039
040
//open fd1
041
fd1 = open(argv[1], OPEN_FLAGS, OPEN_MODE);
042
if
(-1 == fd1)
043
{
044
perror
(
"open fd1 failed: "
);
045
return
-1;
046
}
047
//write fd1
048
ret = write(fd1, W_DATA,
sizeof
(W_DATA));
049
if
(-1 == ret)
050
{
051
perror
(
"write fd1 failed: "
);
052
goto
_OUT;
053
}
054
//lseek fd1 head
055
ret = lseek(fd1, 0, SEEK_SET);
056
if
(-1 == ret)
057
{
058
perror
(
"lseek fd1 failed: "
);
059
goto
_OUT;
060
}
061
062
//open fd2
063
fd2 = open(argv[2], OPEN_FLAGS, OPEN_MODE);
064
if
(-1 == fd2)
065
{
066
perror
(
"open fd2 failed: "
);
067
return
-1;
068
}
069
070
/*阻塞,等待程序读写操作*/
071
072
073
while
(1)
074
{
075
//初始化pollfd
076
fds[0].fd = fd1;
077
//可读
078
fds[0].events = POLLIN;
079
080
fds[1].fd = fd2;
081
//可写
082
fds[1].events = POLLOUT;
083
084
//poll
085
ret = poll(fds,
sizeof
(fds)/
sizeof
(fds[0]), -1);
086
if
(-1 == ret)
087
{
088
perror
(
"poll failed: "
);
089
goto
_OUT;
090
}
091
092
//read fd1
093
if
(fds[0].revents & POLLIN )
094
{
095
//清空缓存
096
//memset(r_buf, 0, sizeof(r_buf));
097
ret = read(fd1, r_buf,
sizeof
(r_buf));
098
if
(-1 == ret)
099
{
100
perror
(
"poll read failed: "
);
101
goto
_OUT;
102
}
103
printf
(
"read = %s\n"
, r_buf);
104
}
105
106
//write fd2
107
if
(fds[1].revents & POLLOUT )
108
{
109
ret = write(fd2, r_buf,
sizeof
(r_buf));
110
if
(-1 == ret)
111
{
112
perror
(
"poll write failed: "
);
113
goto
_OUT;
114
}
115
printf
(
"write = %s\n"
, r_buf);
116
}
117
}
118
119
//close fd1 fd2
120
close(fd1);
121
close(fd2);
122
123
_OUT:
124
return
ret;
125
}
- linux 下阻塞睡眠等待poll函数简单实现
- linux 下阻塞睡眠等待poll函数简单实现
- linux 下阻塞睡眠等待selec函数简单实现
- Linux下poll函数实现多用户聊天
- 【Linux】实现睡眠函数mysleep
- 阻塞睡眠实现机制
- linux下的poll函数
- linux 阻塞等待
- linux kernel poll & 等待队列
- linux下用select实现精确到睡眠时间小于1秒的sleep函数
- linux下pipe,poll函数的学习
- linux中通过等待队列来实现阻塞
- 自实现睡眠函数
- 实现睡眠函数mysleep
- Linux睡眠函数
- poll 函数简单介绍
- I/O非阻塞函数实践:poll
- linux下C语言实现睡眠理法师问题
- valuestack
- WebView清除缓存的有效方法
- 让网页的页脚始终待在最下方
- files_struct
- Javascript绝句欣赏
- linux 下阻塞睡眠等待poll函数简单实现
- android viewholder
- JS只能输入数字,数字和字母等的正则表达式
- segmentation fault
- ERROR 1045 (28000): Access denied for user root@localhost (using password: NO) 的解决办法 ---linux
- sscanf 函数
- 每个JAVA初学者都应该搞懂的六个问题
- 多台机器远程安装应用 ssh
- Android 中的 Service 全面总结