On Fri, Apr 25, 2025 at 5:11 PM Presseau, Michael
<[email protected]> wrote:
>
> Hi,
>
>
>
> I have done my own application console with scanf(). When I run in the screen
> (screen -mS test ./test), it work as expected with each characters printed.
> But when I run it in screen as daemon, it's failing in loop:
>
> $ screen -dmS test ./test
>
> $ screen -r test
>
>
>
> stdin_thread scanf failed! ret: -1
>
> stdin_thread scanf failed! ret: -1
>
>
>
> Do you have any clue on how I can make this work in deamon mode?
>
>
>
> Here is my sample code:
>
> ```
>
> #include <stdio.h>
>
> #include <errno.h>
>
> #include <termios.h>
>
> #include <unistd.h>
>
>
>
> void enableRawMode()
>
> {
>
> #ifdef __linux__
>
> struct termios raw;
>
>
>
> // Get current terminal attributes
>
> tcgetattr(STDIN_FILENO, &raw);
>
>
>
> // Modify terminal attributes for raw mode
>
> raw.c_lflag &= ~(ECHO | ICANON);
>
>
>
> // Set modified attributes
>
> tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
>
> #endif
>
> }
>
>
>
> int main() {
>
> enableRawMode();
>
>
>
> char c;
>
> while (1) {
>
> int ret = scanf("%c", &c);
>
> if ( ret > 0) {
>
> printf("%c", c);
>
> } else {
>
> printf("stdin_thread scanf
> failed! ret: %d\n", ret);
>
> }
>
> }
>
> return 0;
>
> }
>
> ```
Maybe you need a call to:
if (tcsetattr(fd, TCSANOW, &tty) != 0) {
log_error("term_config: tcsetattr: %s\n", strerror(errno));
return errno;
}
to ensure the changes to the terminal are applied immediately.
Jeff