用C语言编程实现linux操作系统中shell命令行的sleep命令。  生成的可执行程序统一用sleepy命名,参数为sleep的秒数n;也可以没有参数,这时程序每秒执行一次,直到用户强制退出;  需要有usage函数,即命令调用失败后,给用户的用法提示;  在调用usage函数时,需要显示当前所调用命令的名称,而默认的argv[0]会给出命令的绝对路径,编写一个StripPath函数,使只显示相对路径。  要求在正确结果输出时,能够显示当前进程的pid。结果格式见下文。

时间: 2023-06-13 15:07:19 浏览: 176
以下是实现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函数实现睡眠,并在睡眠结束后输出完成信息。

相关推荐

doc
实验目的 Linux操作系统中shell是用户与系统内核沟通的中介,它为用户使用操作系统的服务提供了一个命令界面。用户在shell提示符($或#)下输入的每一个命令都由shell先解释,然后传给内核执行。本实验要求用C语言编写一个简单的shell程序,希望达到以下目的:  用C语言编写清晰易读、设计优良的程序,并附有详细的文档。  熟悉使用Linux下的软件开发工具,例如gcc、gdb和make。  在编写系统应用程序时熟练使用man帮助手册。  学习使用POSIX/UNIX系统调用、对进程进行管理和完成进程之间的通信,例如使用信号和管道进行进程间通信。  理解并发程序中的同步问题。  锻炼在团队成员之间的交流与合作能力。 2. 实验要求 1. ysh解释程序的重要特征 本实验要实现一个简单的命令解释器,也就是Linux中的shell程序。实验程序起名为ysh,要求其设计类似于目前流行的shell解释程序,如bash、csh、tcsh,但不需要具备那么复杂的功能。ysh程序应当具有如下一些重要的特征:  能够执行外部程序命令,命令可以带参数。 . 。  能够执行fg、bg、cd、history、exit等内部命令。  使用管道和输入输出重定向。  支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前台/后台状态,以及控制作业的挂起、中止和继续运行。 除此之外,在这个实验中还须做到:  使用make工具建立工程。  使用调试器gdb来调试程序。  提供清晰、详细的设计文档和解决方案。

# -*- coding: utf-8 -*- """ Created on Fri May 26 21:47:54 2023 @author: sleepy student """ import numpy as np jiedian = [] lujing = np.array([[0,1.5,1.6,4,35,44,12,10,24,37,39,33,139,26,16,12,39,49,12,33,28], [1.5,0,3,2.8,33,43,13,12,23,44,37,31,137,25,15,10,37,48,14,31,27], [1.6,3,0,5,33,45,12,10,25,41,36,31,137,25,17,12,37,49,12,31,26], [4,2.8,5,0,34,43,13,13,23,41,38,32,138,26,15,12,38,51,16,30,27], [35,33,33,34,0,43,47,32,33,41,28,7,131,22,25,26,28,50,43,13,13], [44,43,45,43,43,0,54,46,25,73,59,37,108,26,30,34,60,26,57,27,28], [12,13,12,13,47,54,0,17,32,39,36,43,149,36,25,23,42,59,8,41,37], [10,12,10,13,32,46,17,0,32,34,26,31,137,27,25,21,27,58,12,29,22], [24,23,25,23,33,25,32,32,0,64,43,22,120,8,18,20,47,38,41,15,17], [37,44,41,41,41,73,39,34,64,0,29,48,156,53,57,55,29,80,35,46,44], [39,37,36,38,28,59,36,26,43,29,0,24,145,35,44,41,7,72,30,31,28], [33,31,31,32,7,37,43,31,22,48,24,0,122,18,21,22,27,46,39,9,10], [139,137,137,138,131,108,149,137,120,156,145,122,0,117,126,131,145,100,148,115,117], [26,25,25,26,22,26,36,27,8,53,35,18,117,0,11,13,41,35,33,10,9], [16,15,17,15,25,30,25,25,18,57,44,21,126,11,0,11,41,35,33,10,9], [12,10,12,12,26,34,23,21,20,55,41,22,131,13,11,0,18,40,25,21,18], [39,37,37,38,28,60,42,27,47,29,7,27,145,41,41,18,0,69,33,34,33], [49,48,49,51,50,26,59,58,38,80,72,46,100,35,35,40,69,0,60,38,38], [12,14,12,16,43,57,8,12,41,35,30,39,148,33,33,25,33,60,0,36,34], [33,31,31,30,13,27,41,29,15,46,31,9,115,10,10,21,34,38,36,0,5], [28,27,26,27,13,28,37,22,17,44,28,10,117,9,9,18,33,38,34,5,0]]) for i in range(21): lujing[i][i] = 1e9 x = 0 changdu = [] while len(jiedian)<21: min = 1e9 miny = 0 for j in range(21): if lujing[x][j]<min: min = lujing[x][j] miny = j if miny not in jiedian: if x not in jiedian: jiedian.append(x) jiedian.append(miny) changdu.append(lujing[x][miny]) x = miny else: lujing[x][miny] = 1e9 将以上代码转为matlab代码

最新推荐

recommend-type

ZED-F9P_ProductSummary_(UBX-17005151).pdf

The ZED-F9P positioning module features the u-blox F9 receiver platform, which provides multi-band GNSS to high-volume industrial applications in a compact form factor.
recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。