改变终端属性 实现非阻塞

    xiaoxiao2025-10-12  7

    /**  * @file demo8.c  * @Synopsis    * 改变一个己打开文件的属性  * #include <fcntl.h>  * int fcntl(int fd,int cmd,... arg );  * @param int fd  *   * @param int cmd   command  * 读取它的flag  * F_GETFL(void)  * 要是读就不需要第三个参数了  * 设置flag  * F_SETFL(long)  * 要是是设置的话,它的返回就是成功了,第三个参数就是要设置的啦  * @author MrClimb  * @version 1.1.0  * @date 2012-05-09  */

    #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h>

    int main(int argc, char **argv) { #if 0     // 阻塞情况下 输入     char buf[10];     ssize_t rd,wd;     rd = read(STDIN_FILENO,buf,sizeof(buf));     wd = write(STDOUT_FILENO,buf,rd); #endif #if 1     // 非阻塞情况下 输入     char buf[10];     int flags;     flags = fcntl(STDIN_FILENO,F_GETFL);     flags |= O_NONBLOCK;     if(fcntl(STDIN_FILENO,F_SETFL,flags)==-1)     {         perror("fcntl");         exit(1);     }     size_t rd=0,wd=0;          while(rd<=0){        rd=read(STDIN_FILENO,buf,sizeof(buf));     }

        printf("success read rd = %d\n",rd);     wd = write(STDOUT_FILENO,buf,rd);     printf("success write wd = %d\n",wd);

    #endif     return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1303072.html
    最新回复(0)