尽管设置了 O_NONBLOCK 读取块

问题描述

如果我在 O_NONBLOCK 文件时设置 open,一切正常。但是当我通过 read 设置 O_NONBLOCKfcntl 会阻塞。怎么了?

#include <fcntl.h>
#include <sys/epoll.h>
#include <unistd.h>
                                                                
#include <stdio.h>

void
make_nonblock(size_t N,int in[N]) {
  for (size_t i = 0; i < N; ++i) {
    int flags = fcntl(in[i],F_GETFL);
    flags |= O_NONBLOCK;
    fcntl(in[i],F_SETFL,flags);
  }
}

extern size_t
read_data_and_count(size_t N,int in[N]) {
  make_nonblock(N,in);
  char buffer[4096];
  size_t total = 0;
  for (size_t i = 0; i < N; ++i) {
    ssize_t current = 0;
    while ((current = read(in[i],buffer,sizeof(buffer))) > 0) {
      total += current;
    }
  }
  return total;
}

int
main(int argc,char** argv) {
  int fds[1024];
  for (int i = 1; i < argc; ++i) {
    fds[i - 1] = open(argv[i],O_RDONLY);
  }
  size_t result = read_data_and_count(argc - 1,fds);
  printf("Result: %ld\n",result);
  return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)