在linux下,想用sleep函数实现延时五秒,应该怎么设参数?

在linux下,想用sleep函数实现延时五秒,应该怎么设参数?,第1张

使用权限 : 所有使用者 使用方式 : sleep [--help] [--version] number[smhd] 说明 : sleep 可以用来将目前动作延迟一段时间 参数说明 : --help : 显示辅助讯息 --version : 显示版本编号 number : 时间长度,后面可接 s、m、h 或 d 其中 s 为秒,m 为 分钟,h 为小时,d 为日数 例子 : 显示目前时间后延迟 1 分钟,之后再次显示时间 : datesleep 1mdate 这个命令更多应用于shell脚本编程里和程序里 如下面的一段程序: 应用程序: 复制代码代码如下:#include <syswait.h>usleep(n) //n微秒 Sleep(n)//n毫秒 sleep(n)//n秒 驱动程序: #include <linux/delay.h>mdelay(n) //milliseconds 其实现 #ifdef notdef #define mdelay(n) (\ {unsigned long msec=(n)while (msec--) udelay(1000)}) #else #define mdelay(n) (\ (__builtin_constant_p(n) &&(n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \ ({unsigned long msec=(n)while (msec--) udelay(1000)})) #endif 调用asm/delay.h的udelay,udelay应该是纳秒级的延时 Dos: sleep(1)//停留1秒 delay(100)//停留100毫秒 Windows: Sleep(100)//停留100毫秒 Linux: sleep(1)//停留1秒 usleep(1000)//停留1毫秒 每一个平台不太一样,最好自己定义一套跨平台的宏进行控制 秒还是微秒?关于延时函数sleep() 因为要写一段代码,需要用到sleep()函数,在我印象中,sleep(10)好像是休眠10微秒,结果却是休眠了10秒(在Linux下)。觉得很奇怪,因为头儿也记得好像是微秒为单位的。所以就查了一下。 原来linux下的sleep函数原型为: unsigned int sleep(unsigned int seconds)而MFC中的Sleep函数原型为: void Sleep(DWORD dwMilliseconds)也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1)就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000)才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec)当然,使用的时候别忘记#include <system.h>哦。 另外值得一提的是,linux下还有个delay()函数,原型为extern void delay(unsigned int msec)它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250)

#!/bin/bash

Timeout=0

Timeout_limit=1

Timeout_flag=0

IP="8.8.8.8"

while [ 1 ]

do

# 取平均延迟的整数位

Timeout="`ping $IP -c 3 | grep 'min/avg/max/mdev'|awk '{print $4}'|cut -b '7'`"

if [ $Timeout -ge $Timeout_limit ] &amp&amp[ $Timeout_flag -ne 1 ]then

echo ping timeout, average delay=$Timeout ms

mail -s 'Ping Delay' 邮箱 &ltar/log/boot.log

Timeout_flag=1

fi

if [ $Timeout -lt $Timeout_limit ] &amp&amp[ $Timeout_flag -ne 0 ]then

echo ping recovery, average delay=$Timeout ms

mail -s 'Ping recovery' 邮箱 &ltar/log/boot.log

Timeout_flag=0

fi

sleep 5

done第三行Timeout_limit值写错了,应该是100哈,代码提交了不能改了。你这个不需要把延迟结果保存在文件的,而是应该需要作定时检测的。

/*编译命令:gcc -o shm shm.c -g */

2

3#include<sys/sem.h>

4#include<sys/ipc.h>

5

6#define SEGSIZE 1024

7#define READTIME 1

8

9union semum

10{

11int val

12struct semid_ds *buf

13unsigned short *array

14}arg

15

16/* 创建信号量 */

17int sem_creat(key_t key)

18{

19union semun sem

20int semid

21sem.val = 0

22semid = semget(key, 1, IPC_CREAT | 0666)

23

24if (semid == -1)

25{

26printf("Create semaphore error\n")

27exit(-1)

28}

29

30semctl(semid, 0, SETVAL, sem)

31

32return semid

33}

34

35/* 删除信号量*/

36int del_sem(int semid)

37{

38union semun sem

39sem.val = 0

40semctl(semid, 0, IPC_RMID, sem)

41}

42

43/* 信号量的P *** 作,使得信号量的值加1 */

44int p(int semid)

45{

46struct sembuf sops = {0,

47 +1,

48 IPC_NOWAIT

49 }

50

51return (semop(semid, &sops, 1))

52}

53

54/* 信号量的v *** 作,使得信号量的值减1 */

55int v(int semid)

56{

57struct sembuf sops = {0,

58 -1,

59 IPC_NOWAIT

60 }

61

62return (semop(semid, &sops, 1))

63}

64

65/* server主程序 */

66int main(int argc, char **argv)

67{

68key_tkey

69int shmid, semid

70char *shm

71char msg[7] = "-data-"

72char i

73struct semid_ds buf

74

75key = ftok("/", 0)

76shmid = shmget(key, SEGSIZE, IPC_CREAT|0604)

77

78if shmid == -1)

79{

80printf(" create shared memory error\n")

81return -1

82}

83

84shm = (char *)shmat(shmid, 0, 0)

85if (-1 == (int)shm)

86{

87printf(" attach shared memory error\n")

88return -1

89}

90

91semid = sem_creat(key)

92

93for (i = 0i <= 3i++)

94{

95sleep(1)

96p(semid)

97sleep(READTIME)

98msg[5] = '0' + i

99memcpy(shm,msg,sizeof(msg))

100sleep(58)

101v(semid)

102}

103

104shmdt(shm)

105

106shmctl(shmid,IPC_RMID,&buf)

107

108del_sem(semid)

109

110return 0

111

112}

113

114

115

116

117

118

119

120

121


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7188590.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存