O que é “bloqueio” em referência ao arquivo I / O?

5

Meu livro menciona isso, mas não o define especificamente. A partir do contexto em que é usado (neste exemplo, pipes), eu entendo que se uma das extremidades do pipe bloquear , ele está temporariamente "desativado", se você quiser, e os dados são enfileirados? Essa é a parte em que estou um pouco confuso. Quando "bloqueia", o que quer que seja, espera até que seja desbloqueado e continue com o que foi enviado enquanto estava bloqueado? Isto parece ser o que eles estão insinuando, porque eles dizem que quando é "non-blocking" imediatamente retorna um erro (se bem me lembro). Qualquer esclarecimento ou cutucões na direção certa apreciada. Obrigado!

(não tem certeza de quais tags usar)

    
por Marty 06.02.2012 / 10:08

2 respostas

7

Uma chamada de bloqueio retornará quando houver dados disponíveis (e espere por esses dados), uma chamada sem bloqueio retornará dados se houver dados para retornar, caso contrário, retornará um erro dizendo que não há dados (mas sempre retorna "imediatamente" depois de ser chamado).

Se você usa um ou outro depende do que você quer fazer - se você deseja obter esses dados e não há mais nada a fazer, basta chamar uma chamada de bloqueio. Mas às vezes você quer fazer outra coisa se ainda não houver dados.

Veja também select() , a faca suíça POSIX para "há algum dado?" tipo de chamadas, com chamadas bloqueadas em vários descritores de arquivos, que podem ser cronometrados (assim, se não houver entrada por cinco minutos, você pode retornar com um erro).

    
por 06.02.2012 / 10:40
2

Se uma operação de E / S bloquear, a chamada de função / sistema que a iniciou não retornará o controle para o processo / encadeamento até que uma quantidade apropriada de dados seja lida ou gravada.

    
por 06.02.2012 / 10:18