C语言的sleep、usleep、nanosleep等休眠函数的了解与用法
昨天晚上,无聊中捣鼓「死循环」小代码的时候,想用 休眠 函数来慢慢显示输出结果,免得输出结果闪得太快,看都看不清。
但是,使用 sleep 函数的话,最短的休眠时间段是一秒钟,要想看到比较大的输出结果的话,要等好久,于是就查了一下有没有休眠时间段更小的函数。很容易地就找到了两个,一个是 usleep ,一个是 nanosleep 函数。
因为是第一次使用,尤其是 nanosleep 函数的第一个参数是一个没见过的结构体数据类型,所以花了一点点时间去学习和探索背后的细节,当然了,对于俺目前的水平而言,也只是了解了函数本身层面的浅显的细节而已。
捣鼓下来,觉得内容也不少,而且还是挺有用的,就整理了一下,组合成文章,发布在这里,也方便自己以后的回顾学习。
引子
一个无聊的死循环小代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
for (char c = 0; c < 128; c++) {
printf("cool\n");
}
return 0;
}
以及 运行过程 展示版:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
struct timespec n_sleep;
n_sleep.tv_sec = 0; //secondes, integer part sleep duration
n_sleep.tv_nsec = 5e8L; //nanoseconds, decimal part sleep duration
char c;
for (c = 0; c < 128; c++) {
printf("char of c :%c\n", c);
printf("ASCII num of c :%d\n", c);
sleep(1); // 1 s
usleep(900000); // 0.9 s
nanosleep(&n_sleep, NULL); // 0 + 0.5 s
}
return 0