簡體   English   中英

如何在C中將阻止文件io轉換為非阻止

[英]How to convert blocking file io to non-blocking in C

我正在編寫代碼,通過C中的套接字發送終端命令的輸出。我曾嘗試使用select進行異步讀取,並避免阻塞事件循環,但未成功。

如何更改此代碼以使文件流IO不受阻塞?

int maxfdpl;
fd_set rset;
char sendline[100], recvline[100], my_msg[100];
FILE *in;
char str[30]="ping 192.168.26.219";
if(!(in = popen(str, "r"))){
   return EXIT_FAILURE;
}
FD_ZERO(&rset);
FD_SET(fileno(in), &rset);
maxfdpl =fileno(in) + 1;
select(maxfdpl, &rset, NULL, NULL, NULL);
while(1) {
      if (FD_ISSET(fileno(in), &rset)) {
         if (fgets(sendline, 100, in)) {
            send_over_socket(sendline);
         }
      }
}

如何刪除while循環(阻塞事件循環)並將代碼替換為非阻塞IO操作?

int blockFD(int fd, int blocking)
{
    /* Save the current flags */
    int flags = fcntl(fd, F_GETFL, 0);
    if (flags == -1)
        return 0;

    if (blocking)
        flags &= ~O_NONBLOCK;
    else
        flags |= O_NONBLOCK;

    return fcntl(fd, F_SETFL, flags) != -1;
}

如果失敗,則返回0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM