È sistema operativo specifico (o specifico dell'hardware se stai codificando qualche kernel- come il software sul bare metal come un kernel del sistema operativo -vedi osdev.org -, in freestanding C). Stricto sensu probabilmente non puoi scrivere un gioco in hosting C99 ( senza usando qualsiasi libreria esterna , ad eccezione della libreria standard C utilizzando solo le poche funzioni standardizzate in C99): è necessario utilizza alcuni servizi del sistema operativo.
Mi sto concentrando su Linux nella mia risposta di seguito.
Se stai codificando su Linux (in ospitato C, come tutti i programmi utente), codifichi il tuo event loop attorno a un multiplexing syscall come sondaggio (2) (o forse il precedente select(2) , che di solito non consiglio, vedi anche epoll (7) ). Leggi il problema C10K . Potresti utilizzare una libreria di loop di eventi come libev o libevent .
Se non conosci la maggior parte delle syscalls Linux (elencate in syscalls (2) ...), leggi Programmazione Linux avanzata .
Leggere e interrogare il terminale è complicato su Linux (perché tty -s sono piuttosto complessi). Probabilmente vorrai utilizzare qualche libreria, come ncurses , per creare un'applicazione terminale.
Se desideri codificare un'applicazione GUI, utilizzerai praticamente alcuni toolkit framework come Qt o Gtk (o libsdl ). Forniscono un ciclo degli eventi e dovrai registrare le callback (leggi anche continuazioni , è un concetto pertinente).
Se desideri comunicare due programmi (scritti da te), dovrai utilizzare alcuni IPC macchinari, in particolare pipe (7) -s. Probabilmente avrai bisogno di un loop di eventi in alcuni (o entrambi).
Per i problemi relativi al tempo, sondaggio (2) (quindi tutto il ciclo degli eventi librerie costruite sopra di esso) viene dato un ritardo. Vedi anche orario (7) .
Non consiglio di utilizzare signal (7) -s nel tuo caso (I segnali sono un'interruzione come l'astrazione fornita dal sistema operativo, in particolare POSIX quelli). Se lo fai, stai molto attento, è difficile. Un gestore di segnale può solo chiamare pochissime funzioni di sicurezza del segnale asincrono, e il solito modo è spesso di impostare semplicemente un% flag% di memoria in esso, da testare e resettare all'interno del ciclo degli eventi. Vedi anche concetti di segnale POSIX capitolo.
Se stai codificando su un sistema operativo non- POSIX come Windows, devi imparare come scrivere loop di eventi su di esso, e qual è l'API di sistema di basso livello. Probabilmente troverai una libreria per questo. Esistono alcune librerie (ad es. Qt & POCO - sia per che in C ++) che sono multipiattaforma. La programmazione Windows è molto diversa dalla programmazione POSIX, non ne so nulla.