用C语言编程实现linux操作系统中shell命令行的sleep命令。 生成的可执行程序统一用sleepy命名,参数为sleep的秒数n;也可以没有参数,这时程序每秒执行一次,直到用户强制退出; 需要有usage函数,即命令调用失败后,给用户的用法提示; 在调用usage函数时,需要显示当前所调用命令的名称,而默认的argv[0]会给出命令的绝对路径,编写一个StripPath函数,使只显示相对路径。 要求在正确结果输出时,能够显示当前进程的pid。结果格式见下文。
时间: 2023-06-13 09:07:19 浏览: 234
是开卷ad开始就东城街道
以下是实现sleepy命令的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <libgen.h>
void usage(char *name) {
printf("Usage: %s [seconds]\n", basename(name));
}
char *strip_path(char *path) {
char *p = strrchr(path, '/');
if (p == NULL) {
return path;
} else {
return p + 1;
}
}
int main(int argc, char **argv) {
pid_t pid = getpid();
if (argc > 2) {
usage(argv[0]);
return 1;
}
int seconds = 1;
if (argc == 2) {
seconds = atoi(argv[1]);
if (seconds <= 0) {
usage(argv[0]);
return 1;
}
}
printf("[%d] %s started with %d seconds\n", pid, strip_path(argv[0]), seconds);
while (seconds > 0) {
sleep(1);
seconds--;
}
printf("[%d] %s finished\n", pid, strip_path(argv[0]));
return 0;
}
```
该程序首先检查参数个数,如果没有参数,则每秒执行一次,直到用户强制退出。如果有一个参数,则将其转换为整数作为睡眠秒数。如果参数个数大于2,则调用usage函数打印用法提示并退出程序。
在打印用法提示时,使用basename函数将绝对路径转换为相对路径。这里使用了一个自定义的strip_path函数实现这个功能。
在正确结果输出时,使用getpid函数获取当前进程的pid,并将其和程序名称和参数一起输出。
最后,使用sleep函数实现睡眠,并在睡眠结束后输出完成信息。
阅读全文