Sample Header Ad - 728x90

when read buffer size is 2048, it work , but buffer size is 48 or other number, write call will be blocked, why?

0 votes
2 answers
383 views
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char* argv[]){
    if(argc < 2){ 
        puts("err argv");
        return -1; 
    }   

    int r_fd = open(argv, O_RDWR);
    int w_fd = open(argv, O_RDWR);

    fd_set r_set;
    fd_set w_set;
    char w_buf;
    char r_buf;
    int read_count = 0,write_count = 0;  
    while(1){
        FD_ZERO(&r_set);
        FD_ZERO(&w_set);
        FD_SET(r_fd, &r_set);
        FD_SET(w_fd, &w_set);
        int ret = select(w_fd + 1, &r_set, &w_set, NULL, NULL);
        if(FD_ISSET(r_fd, &r_set)){
            read(r_fd, r_buf, sizeof(r_buf));    
            printf("read count:%d\n", read_count++);    
        }   
        if(FD_ISSET(w_fd, &w_set)){
            write(w_fd, w_buf, sizeof(w_buf));
            printf("write count:%d\n", write_count++);  
        }   
        //sleep(1);
    }   

    return 0;
}
execute code:mkfifo 1.fifo && gcc main.c -o main && ./main 1.fifo
Asked by zhenfei ren (1 rep)
Feb 9, 2023, 03:52 AM
Last activity: Feb 10, 2023, 12:34 AM