我嘗試讀取使用輪詢從管道中的數據從管道讀取,這裏是代碼:使用輪詢
#include <stdio.h>
#include <fcntl.h>
#include <poll.h>
#define MAX_BUFF_SIZE 128
int main(void){
char buff[MAX_BUFF_SIZE];
char *buf;
int fd,ret,len;
struct pollfd fdinfo[1];
if((fd = open("/home/s/pipe", O_RDONLY)) == NULL) {
printf("Error Opening File.\n");
exit(1);
}
fdinfo[0].fd = fd;
fdinfo[0].events = POLLIN|POLLPRI ;
while(1){
ret = poll(fdinfo,1,-1);
if (ret < 0) printf("\n\r error");
if (((fdinfo[0].revents&POLLIN) == POLLIN) || ((fdinfo[0].revents&POLLPRI) == POLLPRI)){
len = read(fdinfo[0].fd, buff, MAX_BUFF_SIZE);
if (len > 0){
buff[len] = 0;
buf = (char *) malloc(len);
memcpy(buf, buff, len);
printf("\n read len %d\n %s",len, buf);
free(buf);
}
}
}
return 0;
}
這似乎並不很好地工作 - 每一個正確的數據後,我得到了很多的垃圾產量,但我不知道它來自哪裏。所以我即將尋求幫助。提前
不要使用struct pollfd fdinfo [1]; 使用struct pollfd * fdinfo,然後對其進行解引用。更容易理解,更快=)。 – 2010-10-23 00:30:36