Re: Trouble reading a character device.
Glynn Clements <[email protected]>
| Newsgroups | org.kernel.vger.linux-c-programming |
|---|---|
| Message-ID | <[email protected]> |
saravanaraj v wrote:
> I am facing few issues in reading from a character device.
> I have created few character devices using 'mknod' and I am writing
> continuously to those devices using 'printk'. After some time I start
> another process to read from the device. The open/read is done using
> normal sys calls for file open/reading. I have pasted the code for
> your ref. When I run this program the read happens for some time and
> then there is no progress. I am suspecting that everything written to
> the device before this program was started is read. The flags I tried
> for opening the file were RD, RDWR with/without NONBLOCK. The output
> was same in all the cases. I tried "cu -l /dev/virt_uart8". It was
> able to read continuosuly without any problem. Can someone tell where
> the problem is ?
>
> int main(){
>
> int fd,counter=0;
> fd = open("/dev/virt_uart8",O_RDONLY|O_NONBLOCK);
> if(fd<0) printf("\nError in opeining file");
> while(1){
>
> int nread = 0;
> nread = read(fd,buffer,MAX_BUFFER_SIZE-1);
> if(nread>0) {
> buffer[nread]='\0';
> printf("%s",buffer);
> }
If you want to print data which doesn't necessarily have a trailing
newline, you need fflush(stdout) or setvbuf(stdout, NULL, _IONBF, 0).
If you make that change and still have problems, it's likely to be an
issue with the device. E.g. you may need to disable XON/XOFF
processing with tcsetattr(), or put the device into raw mode.
--
Glynn Clements <[email protected]>