在Linux程序设计中,sleep函数是一种非常重要的函数。它可以用来暂停程序的执行,而不会让程序退出。本文将会深入了解Linux程序设计中的C语言sleep函数。
1. 理解sleep函数的概念
sleep函数用于让程序等待一定的时间后再执行下一步操作。在程序中,经常需要控制程序的执行速度,或者需要在执行过程中暂停一下程序的运行。此时,sleep函数就可以派上用场了。
2. sleep函数的功能
sleep函数的功能非常简单,就是让程序等待一定的时间后再继续往下执行。在C语言中,使用的是头文件下的函数声明,函数原型如下所示:
“`
unsigned int sleep(unsigned int seconds);
“`
其中,参数seconds指定了等待的秒数。具体而言,sleep函数会让当前线程等待指定的秒数,然后再继续执行下一步操作。如果seconds为0,那么该函数什么也不会做。如果seconds大于0,那么该函数会导致线程阻塞,直到等待的时间到了为止。
3. 注意事项
在使用sleep函数时需要注意以下几点:
(1)sleep函数是不可移植的,不同的操作系统实现的sleep函数可能有所不同。
(2)在某些操作系统中,sleep函数可能会被信号中断,这种情况下该函数会立即返回。
(3)当调用sleep函数时,如果被中断了,则会返回剩余的时间,此时可以再次调用sleep函数。
4. 示例代码
下面是一个简单的示例代码,用来演示如何使用sleep函数:
“`
#include
#include
#include
int mn()
{
int i, j;
for (i = 0; i
{
printf(“i = %d\n”, i);
for (j = 0; j
{
printf(“j = %d\n”, j);
sleep(1);
}
}
return 0;
}
“`
在这个例子中,程序打印出了10个i和5个j。每个j的打印之间间隔了1秒钟。可以通过改变sleep函数的参数来改变程序的输出效果。
5.
相关问题拓展阅读:
- 在linux环境下c语言中如何让while循环执行固定的时间如200毫秒
- Linux C语言用system()调用,带参数
- linux C语言编程 唤醒指定PID的进程
在linux环境下c语言中如何让while循环执行固定的时间如200毫秒
linux不是实时系统,含毕一般不能准确的定时。
另外 sleep 在Windows下的单位是毫秒,而linux下单位是秒,而且好像有大小写区别。
要睡眠200毫秒的话,可以用nanosleep,单衡老虚位是咐燃纳秒。
…
楼上的想让你的程序变成悲剧…linux下sleep函数的参数是秒为单位的…休眠200秒…
睡眠灶弯答小于1秒用usleep,单位是毫秒…
所以,楼上的程序把sleep改成usleep就隐慧可以 了…
while(1)
{
/* any thing you want to do*/
usleep(200);
}
另外我觉得你要说的好像是:希望while循环执行某些操作,执行时间到200毫秒之后退出while循环?
最简单是用间隔定时器…
你查下这几个函数:timer_create,timer_settime等。
时间设置比较精确,可以设置一段时间间隔,过了闹握指定的时间之后,会给当前进程发送一个SIGALRM信号,你while循环的条件,可以在SIGALRM的信号处理函数里面修改,这样,到时间之后while就可以退出了….
这样写:
//…
…
…
static char flag=1
…
int main(void)
{
signal(SIGALRM, timer_handler);
/*
申请并且设置间隔定时器的间隔
*/
while(flag)
{
/*循环内的操作*/
}
…
return 0;
}
void timer_handler(unsigned int signal)
{
flag=0;
}
例如下面的是从1加到100:
main()
{
int i,sum=0;
i=1;
while(i100时,结束循环。
相当于:
i=1;
while(i
{ sum=sum+i;
i++;
}
我也初学,前天看到这里.呵呵
while(1)
{
/庆散* any thing you want to do*/
sleep(200);
}
windows 和 linux 都有sleep函数誉余氏,你自己查询一下毁粗。
while(1)
{
usleep(200);
}
Linux C语言用system()调用,带参数
格式:
system(字符串)
例如:
char my_cmd1=”ls -l”;
char my_cmd2=”ls -l > abc.txt”;
char my_cmd3=”simser.exe 67″;
system(my_cmd1);
system(my_cmd2);
system(my_cmd3);
–
simser.exe 67
67 是位扮磨慧厅答置参数才可以这样写。(也就是 通过游肆 simser.exe 的
main(int argc, char *argv) argv 传入的)
system(“simser”,”67″); — wrong, system takes one parameter only.
linux c system函数介绍:
system(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#i nclude
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此更好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题握猜。
范例
#i nclude
main()
{
system(“ls -al /etc/passwd /etc/shadow”);
}
执行结果:
-rw-r–r– 1 root root 705 Sep 3 13 :52 /etc/passwd
-rroot root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp;
sprintf(tmp,”/bin/mount -t vfat %s /mnt/u”,dev);
system(tmp);
其中dev是/dev/sda1。
system函数的源码
#include
#include
#include
#include
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())
status = -1;
}
else if(pid = 0){
execl(“/bin/sh”, “sh”, “-c”, cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句禅皮肢
}
else
{
while(waitpid(pid, &status, 0)
if(errno != EINTER)
{
status = -1;
break;
}
}
}
return status;
}
那么如何获得system的返回值呢??
char buf;
char * ps=”ps -ef|grep -c root”;
FILE *ptr;
int i;
if((ptr = popen(ps, “r”)) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}
可以man下waitpid查看下如何检查status的值
int ret = system(“ls -al /etc/passwd /etc/shadow”);
if(WIFSIGNALED(ret))
linux C语言编程 唤醒指定PID的进程
这样应该可以:
kill(cpid, SIGUSR1);
给你并物一个完整的测试代码:
#include
#include
#include
#include
#include
void handler(int signo)
{
printf(“recv the signal from parent process\n”);
}
int main()
{
pid_t pid;
pid = fork();
switch(pid)
{
case -1:
perror(“fork failed”);
exit(1);
case 0:
printf(“in the child\搜顷n”);
signal(SIGCONT, handler);
pause();
printf(“child weakup\n”);
break;
default:
printf(“in the parent\n”);
sleep(5);
kill(pid, SIGCONT);
sleep(5);
printf(“parent weakup\n”);
break;
}
printf(“bye..\n”);
exit(0);
}
运行及绝漏液输出:
beyes@linux-beyes:~/C> ./weakup.exe
in the child
in the parent
recv the signal from parent process
child weakup
bye..
parent weakup
bye..
………………………………
用kill函数给这个进程粗逗发一个信号。
#include
#include
int kill(pid_t pid, int sig);
关于linux c语言sleep函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/166391.html<