Domanda

A livello abbastanza alto nella funzione Linux write (), che filtra le richieste di scrittura 0 buffer di lunghezza. Che ha un senso. Chi vorrebbe sprecare il sistema operativo è il momento di perforazione attraverso strati solo per determinare non c'è lavoro da fare?

Beh ... a me.

E 'legata a questo ; e la scoperta che il driver I2C po-sbattuto darà un codice di ritorno potenzialmente utile se l'indirizzo (inviato sul bus prima che i dati) darà un errore se l'handshake è sbagliato.

Si potrebbe inviare dati fittizi dopo l'indirizzo, ma non con il dispositivo che sto utilizzando. (Forse proverò una lettura ...).

Quindi la domanda è:? Che tipo di inferno sarebbero scatenate se i kernel erano per permettere zero (0) di lunghezza scrive

È stato utile?

Soluzione 2

Solo per il gusto di chiusura, sto andando con l'idea di Warren Young di aggiornamento del driver e la pubblicazione della patch (quando ricevo un round tuit ).

Altri suggerimenti

Quello che stai descrivendo è pari a sostanzialmente lo stesso tipo di male che infesta diverse API di Windows che hanno bisogno di quantità imprevedibili di memoria. La pratica è chiamarli senza buffer per mettere il loro lavoro, fanno il lavoro comunque, senza memorizzare i risultati, ma contando il numero di byte che avevano bisogno lungo la strada. Poi si alloca un buffer di quelle dimensioni, e chiama la funzione di nuovo con il buffer, conoscendo le dimensioni.

Questa è indescrivibilmente male. E 'l'equivalente programmazione di computer di una burocrazia decaduto, dove ogni reparto richiede di compilare un modulo che ha la maggior parte delle stesse informazioni su di esso come quella che ha dato al reparto precedente, ma poiché non v'è alcuna differente informazioni su ogni modulo, essi non solo prendere una copia del modulo che ha dato gli altri ragazzi. Ptui!

tempo programmatore è costoso, tempo di CPU è a buon mercato. Che richiede ai programmatori di scrivere la stessa chiamata N volte API per suss fuori qualche Stato mondiale che l'API si potrebbe lavorare sui propri tentativi di capovolgere questo sulla sua testa.

Le migliori pratiche, quindi, è quello di avere il driver fare tutto il possibile per assicurarsi che il write () ha successo. Se è possibile prevedere in anticipo che non può avere successo controllando alcune stato del mondo, forse dovrebbe essere un ioctl ().

Molto poco, mi piacerebbe pensare - potrebbe essere possibile che una scrittura di lunghezza zero bloccherebbe se il buffer è iscritto a ha zero spazio disponibile e, in alcuni driver. Impedire scrive lunghezza zero potrebbe rendere le cose più semplici in casi come quello -. Così come evitare un sacco di lavoro sprecato

Perché non basta rimuovere tale controllo e vedere che tipo di inferno si scatena in realtà? :)

Non una risposta seria: si potrebbe ottenere un programma come toccare : P

mi vengono i brividi a suggerire un ioctl (), ma non vorrei che essere una migliore interfaccia per ottenere informazioni sullo stato sull'interfaccia?

Cosa sarebbe una lunghezza pari a zero scrittura significa? In generale, significa scrittura trasferimento dei dati ... e sono sicuro che più problemi sarebbero causati da non controllare per esso e la cattura in tal modo la maggior parte un sacco di input non validi per i conducenti. y

se si tratta di un singolo bit-di-informazione "Fate questo" invito siete dopo, penso che ioctl è la strada da percorrere. Non è abbastanza, ma cosa si può fare?

In alternativa, prendere l'opzione nucleare, l'uso mmap () e spostare il tutto in user-space. Basso overhead, e si può scrivere codice Poke classico come "scrittura X a tale registro", che sembra quasi che è quello che ti serve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top