无法将文件描述符设置为阻止模式

问题描述 投票:0回答:1

我正在尝试编写最短的代码以具有阻止文件描述符。

我先设定:O_NONBLOCK第二个:ICANON,[VMIN],[VTIME]作为我的文件描述符...

我还需要设置其他哪些选项来具有阻止文件描述符?

((sample.txt为空,并且以不同模式打开()不会发生任何事情)] >>


#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <termios.h>


void set_blocking(int fd, int blocking) {

    int flags = fcntl(fd, F_GETFL, 0);

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

    fcntl(fd, F_SETFL, flags);

    return;
}

int main(){

        int fd;
        char buff[100];
        struct termios options;

        options.c_lflag &= ~ICANON;

        options.c_cc[VMIN] = 2;
        options.c_cc[VTIME] = 0;

        fd = open("sample.txt",O_RDWR);

        tcsetattr(fd, TCSANOW, &options);

        set_blocking(fd,1);

        read(fd,buff,2);

        printf("%s\n",buff);

        return 0;
}

我正在尝试编写最短的代码以具有阻止文件描述符。我先设置:O_NONBLOCK,然后再设置:ICANON,[VMIN],[VTIME]作为我的文件描述符...我还需要设置其他哪些选项...

c linux file-descriptor termios
1个回答
0
投票

您的代码仅修改未初始化的struct termios options变量的一部分。当您的代码调用tcsetattr时,大多数options变量将设置为随机位,因此tcsetattr可能会返回错误或将伪造的设置应用于终端。

© www.soinside.com 2019 - 2024. All rights reserved.