How to print a message in one single line in Linux kernel
Asked Answered
E

2

13

I am making a simple enque/deque program in kernel. I want to print message in kernel, and this is what I got:

[18594.595747] Enqueue 3 
[18594.595748]  queue :  
[18594.595751] 2 
[18594.595751] 1 
[18594.595752] 3 

But I want to print this without newline:

[8594.595747] Enqueue 3 
[18594.595748]  queue : 2 1 3

This is a part of my code:

   printk(KERN_ALERT "Enqueue %d \n queue :  ", a);
   rear++;
   for(i = front; i<rear; i++)
      printk(KERN_ALERT "%d ", queue_test[i]);  

In short, I want to print in kernel a message in one line. But if I use printk, it changes line automatically. How do I print a message in one line?

Eighteen answered 30/3, 2015 at 3:29 Comment(1)
I guess you need printk(KERN_CONT …); or pr_cont(…); depends on your needs. But usually it's a bad idea, means you have to rethink what you are trying to do and do this in another way.Woodhead
J
21

To prevent a new line from being started, use KERN_CONT:

printk(KERN_ALERT "self destruction commences in ");
printk(KERN_CONT "%d", time_remaining);
printk(KERN_CONT " minutes\n");
Jonquil answered 30/3, 2015 at 8:21 Comment(0)
I
0

Debugging by printing

printk(KERN_ERR "Doing something was ");
/* <100 lines of whatever>*/
if (success)
   printk(KERN_CONT "successful\n");
else
   printk(KERN_CONT "NOT successful\n");

Logging prints should be safe: SFP vs single CPU.

Intrigue answered 3/4, 2015 at 9:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.