- 论坛徽章:
- 0
|
是关于采用自定义的缓冲区实现“预读”处理的例子。
运行的时候得不到结果,帮我看看吧,谢谢!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- extern int errno;
- static int read_cnt;
- static char read_buff[20];
- static char *read_ptr = NULL;
- static my_read(int fd, char *ptr)
- {
- printf("444444444444444444444\n");
- if(read_cnt <= 0){
- printf("555555555555555555555\n");
- again:
- if((read_cnt = read(fd, read_buff, sizeof(read_buff)) < 0)){
- if(EINTR == errno){
- goto again;
- }
- return -1;
- }
- else if(0 == read_cnt){
- return 0;
- }
- read_ptr = read_buff;
- printf("read_cnt = %d\n", read_cnt);
- }
- read_cnt--;
- *ptr = *read_ptr++;
- return 1;
- }
- ssize_t readline(int fd, void *vptr, size_t maxlen)
- {
- char *ptr = (char *)vptr;
- char i, c, n;
- printf("1111111111111111111111111111\n");
- for(i = 1; i <= maxlen; i++){
- printf("2222222222222222222222222222\n");
- if((n = my_read(fd, &c)) == 1){
- printf("3333333333333333333333333333\n");
- *ptr++ = c;
- if('\n' == c){
- break;
- }
- }
- else if(0 == n){
- *ptr = 0;
- return (i-1);
- }
- else{
- return -1;
- }
- }
- *ptr = 0;
- printf("i = %d\n", i);
- return i;
- }
- ssize_t readlinebuf(void **pptr)
- {
- if(read_cnt){
- *pptr = read_ptr;
- }
- return read_cnt;
- }
- int main(int argc, char **argv)
- {
- int nread, nwrite;
- int nleft;
- char *pptr = NULL;
- nread = readline(STDIN_FILENO, read_buff, 10);
- printf("nread = %d\n", nread);
- nleft = readlinebuf((void *)&pptr);
- printf("nleft = %d\n");
- printf("%s", pptr);
- return 0;
- }
复制代码 |
|