Pergunta

Em nível bastante elevado, o Linux write (), função que filtra os pedidos para escrever 0 comprimento de buffers.O que faz sentido.Quem quer SO perder é hora de perfuração através de camadas apenas para determinar não há nenhum trabalho para ser feito?

Bem ...a mim.

Ele é relacionado a esse pergunta;e a descoberta de que o bit-bateu I2C driver dará uma potencialmente útil do código de retorno se o endereço (emitido no barramento de dados) vai dar um erro se o handshaking é errado.

Alguém poderia enviar dados fictícios após o endereço, mas não com o dispositivo estou usando.(Talvez eu vou tentar uma leitura ...).

Então a pergunta é: Que tipo de inferno seria desencadeada se o kernel para permitir que eram zero (0) comprimento escreve?

Foi útil?

Solução 2

Apenas por causa do fechamento, vou com a idéia de Warren Young de atualizar o motorista e publicar o patch (quando eu conseguir uma rodada tuit).

Outras dicas

O que você está descrevendo equivale a essencialmente o mesmo tipo de mal que infesta várias APIs do Windows que precisam de quantidades imprevisíveis de memória. A prática é chamá -los sem buffer para colocar seu trabalho, eles fazem o trabalho de qualquer maneira, sem armazenar os resultados, mas contando o número de bytes que precisariam ao longo do caminho. Em seguida, você aloca um buffer desse tamanho e chama a função novamente com o buffer, sabendo o tamanho.

Isso é indescritivelmente mau. É a programação de computadores equivalente a uma burocracia deteriorada, onde cada departamento exige que você preencha um formulário que tenha a maioria das mesmas informações sobre ele que a que você deu ao departamento anterior, mas como existem informações diferentes sobre cada formulário, Eles não vão apenas pegar uma cópia do formulário que você deu aos outros caras. Ptui!

O tempo do programador é caro, o tempo da CPU é barato. Exigindo que os programadores escrevam a mesma chamada de API N TIMES para divulgar algum estado mundial de que a própria API poderia funcionar por conta própria tenta virar isso de cabeça para baixo.

A melhor prática, então, é fazer com que o motorista faça tudo o que puder para garantir que sua gravação () seja bem -sucedida. Se for possível prever com antecedência que não pode ter sucesso verificando algum estado do mundo, talvez isso deva ser um ioctl ().

Muito pouco, eu pensava - pode ser possível que uma gravação de comprimento zero bloqueasse se o buffer que ele está escrevendo também não tivesse espaço disponível, em alguns motoristas. A proibição de gravações de comprimento zero pode tornar as coisas mais simples em casos como esse - além de evitar muito trabalho desperdiçado.

Por que não remover essa verificação e ver que tipo de inferno realmente se solta? :)

Não é uma resposta séria: você pode obter um programa como toque : P

Estremeço a sugerir um ioctl (), mas isso não seria uma interface melhor para obter informações de estado sobre a interface?

O que seria um comprimento zero escrever significa?Em geral, a escrita significa a transferência de dados...e tenho certeza de mais problemas seriam causados pela não verificação para ele e, assim, a captura de mais muitos maus entrada para os motoristas.y

se é um único bit de informação "fazer isso", chamada que você está depois, eu acho que ioctl é o caminho a percorrer.Ele não é bonito, mas o que você pode fazer?

Como alternativa, apanhe a opção nuclear, use mmap() e mover a coisa toda em espaço de usuário.Baixo overhead, e você pode escrever o clássico poke código como "escrever X para este register", que quase parece que é o que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top