生活随笔
收集整理的這篇文章主要介紹了
非阻塞IO-读数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
阻塞型看:阻塞IO讀數據
使用set_fl(STDIN_FILENO, O_NONBLOCK);將輸入輸出設置為非阻塞時,read()函數等不到數據輸入的時候就會直接返回出錯信息,而不是繼續等到用戶輸入。
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>int main(
void)
{
char buffer[
4096] = {
'\0'}; ssize_t size =
0;set_fl(STDIN_FILENO, O_NONBLOCK);sleep(
5);size = read(STDIN_FILENO, buffer,
sizeof(buffer));
if(size <
0){perror(
"read error!");
exit(
1);}
else if(size ==
0){
printf(
"read finished!\n");}
else{
if(write(STDOUT_FILENO, buffer, size) != size){perror(
"write error!");
exit(
1);}}
return 0;}
void set_fl(
int fd,
int flags)
{
int val;
if ( (val = fcntl(fd, F_GETFL,
0)) <
0){
printf(
"fcntl F_GETFL error");
exit(
1);}val |= flags;
if (fcntl(fd, F_SETFL, val) <
0){
printf(
"fcntl F_SETFL error");
exit(
1);}
}
void clr_fl(
int fd,
int flags)
{
int val;
if ((val = fcntl(fd, F_GETFL,
0)) == -
1){perror(
"fcntl error!");
exit(
1);}val &= ~flags;
if (fcntl(fd, F_SETFL, val) == -
1){perror(
"fcntl error!");
exit(
1);}
return;
}
測試;
andrew
@andrew-
Thurley:~/work/iotec$ bin/noblock
read error!
: Resource temporarily unavailable
andrew
@andrew-
Thurley:~/work/iotec$
總結
以上是生活随笔為你收集整理的非阻塞IO-读数据的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。