する#include <stdio.hに> する#include <STDLIB.H> する#include <unistd.h> の#include <fcntl.h> の#define Err_Exit(M)\ 実行\ {\ perrorは(M); \ 終了(EXIT_FAILURE)。 \ }ながら(0) ファイル状態に//設定 ボイドSET_FLAGを(int型FD、INTフラグ); //ファイル状態REMOVE ボイドclear_flag(int型FD、フラグint)を、 int型のmain(int型ARGC、チャー*のARGV [ ]){ チャーBUF [64] = {0}; NREAD int型; //セット非ブロック SET_FLAG(0、O_NONBLOCK); //はブロックされていない状態をクリアするが、ブロックされた状態になる標準入力読み込み clear_flag(0、O_NONBLOCK)を; NREAD =読む(0、BUF、64)。 IF(NREAD == -1){ oldflag =のfcntl(FD、F_GETFL、0); ERR_EXIT( "入力が失敗GET"); } のprintf( "BUF =%S \ N-"、BUF); 戻り0; } ボイドSET_FLAG(INT FD、フラグINT){ int型oldflag; oldflag =のfcntl(FD、F_GETFL、0 ); IF(oldflag == -1){ Err_Exit() "元の状態の失敗を取得"; } oldflag oldflag = |フラグ; int型のRET =のfcntl(FD、F_SETFL、oldflag); IF(RET == -1){ ERR_EXIT( "新しいファイルを設定した状態を失敗しました"); } } ボイドclear_flag(FDの整数、フラグINT){ int型oldflag; IF(oldflag == -1){ ERR_EXIT( "元の状態に「)の取得に失敗しました。 } Oldflag =〜&フラグoldflag; int型のRET =のfcntl(FD、F_SETFL、oldflag); IF(RET == -1){ Err_Exit( "失敗した新しいファイルを設定するために状態"); } }