strace常见系统调用
1.Sleep,Usleep都是在库函数中实现,最终都会调用nanosleep的系统调用
以usleep(1000)为例,用strace进行跟踪
int nanosleep(const struct timespec *req, struct timespec *rem);
struct timespec
{
time_t tv_sec;
long tv_nsec;
}
这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
2.memcpy直接在库函数里面实现,不经过系统调用