Psché. Y si no, al carajo la portabilidad. En linux puedes usar
esto. La función alarm es un poco tosca y sólo admite tiempos múltiplos de 1 segundo. La función setitimer es mucho más sofisticada y te permite implementar temporizadores con tiempos que van desde los microsegundos. El tema de los temporizadores... veo complicado que encuentres una solución portable decente. Lo digo porque para implementar un temporizador, sueles depender de los servicios y llamadas al sistema de los que te provee el SO. No digo que no puedas encontrar
ninguna solución portable y que use la librería estándar. Está la de
satu. Sin embargo, no me gusta mucho esta última por algo que detallaré más adelante.
Lo de usar un bucle a modo de temporizador, como propone
~, no es muy buena idea. Una de las razones las da el propio
~. Otro inconveniente es que consume tiempo de cálculo y mantiene la CPU ocupada. Lo mismo con la solución de
satu: consume tiempo de cálculo innecesario (y además, realiza llamadas al sistema constantemente). Es mejor usar funciones
bloqueantes, aunque ello signifique perder en portabilidad, porque es un desperdicio de recursos tener un programa en Run o en la cola de Ready que sólo está esperando. Y si no, se pueden usar librerías de terceros que estén disponibles para varios SO y que ofrezcan temporizadores. O implementar uno mismo esas librerías para los SO a los que se piensa dirigir el programa (en este ejemplo, se podría implementar el temporizador con sleep para Windows y con setitimer para Linux). De esa forma, el código sería portable, pero no se limitaría a la librería estándar. No obstante, la solución de
satu es perfectamente válida si tu código tiene únicamente fines académicos o es para uso propio, pero no es algo que yo recomendaría para proyectos profesionales.
Saludos