(笔记)Linux下的准确延时,#include 调用出错

  • Post author:
  • Post category:linux



在编写应用层程序时,有时需要延时一下,这个时候该怎么办呢?


在内核代码中,我们经常会看到这样的头文件使用#include <linux/delay.h>,心想着直接调用这个就可以了吧!可是在编译时发现,压根通不过,


提示错误如下:

error: No such file or directory.



是不是觉得很奇怪,明明文件是存在的,怎么就不能调用了,而且内核很多文件调用得很欢。这是为什么呢?



因为内核程序跟应用程序是有区别的,有些特殊的内核头文件编译器不允许被应用程序调用。故编译应用程序使用内核的头文件,报错是难免的


但是,这个时候该怎么呢?


哈哈!#include <unistd.h>头文件出现了!功能与#include <linux/delay.h>一致,但是可以在应用层随便调用。不错的东西吧!以下是其详细介绍:


应用层:



#include <unistd.h>






1、unsigned int sleep(unsigned int seconds); 秒级



2、int usleep(useconds_t usec);              微秒级:1/10^-6





#define _POSIX_C_SOURCE 199309



#include <time.h>



3、int nanosleep(const struct timespec *req, struct timespec *rem);



struct timespec {




time_t tv_sec;        /* seconds */



long   tv_nsec;       /* nanoseconds */



};



// The value of the nanoseconds field must be in the range 0 to 999999999.






内核层:



include <linux/delay.h>



1、void ndelay(unsigned long nsecs);         纳秒级:1/10^-10



2、void udelay(unsigned long usecs);         微秒级: 1/10^-6