用fcntl改變File Status Flag

#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>

#define MSG_TRY  "try again\n"

int main()
{
    char buf[10] = {0};
    int n = 0;
    int flags = 0;

   ///這裏獲取STDIN_FILENO(標準輸入)的文件屬性(也可以獲取其他文件的文件屬性)

    flags = fcntl(STDIN_FILENO, F_GETFL);
    flags |= O_NONBLOCK;/// 或上非阻塞
    if (fcntl(STDIN_FILENO, F_SETFL, flags) == -1)///重新設置文件屬性
    {
        perror("fcntl");
        exit(1);
    }

tryagain:
    n = read(STDIN_FILENO, buf, 10);

    if (n <0)
    {
        if (errno == EAGAIN)
        {
            sleep(1);
            write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
            goto tryagain;
        }
        perror("read stdin");
        exit(1);
    }
    write(STDOUT_FILENO, buf, n);

    return 0;
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章