请画出仿写ls-l命令的功能,编写一个自己的myls程序流程图
时间: 2024-05-03 20:18:27 浏览: 126
以下是myls程序的流程图:
```
开始
输入命令行参数
判断是否有-l参数
若有-l参数,则执行以下操作:
打开当前目录
读取目录中的所有文件和子目录
对于每一个文件和子目录,输出以下信息:
文件类型和权限、硬链接数、所有者、所属组、文件大小、修改日期、文件名
关闭目录
否则,执行以下操作:
打开当前目录
读取目录中的所有文件和子目录
对于每一个文件和子目录,输出文件名
关闭目录
结束
```
其中,判断是否有-l参数的步骤可以使用命令行解析库来实现。在执行-l参数时,需要使用系统调用来获取文件的详细信息,例如stat()函数。
相关问题
编写一个shell脚本,使用execvp 实现arg[1] :ls arg[2]: -l arg[3] \n
好的,您可以编写一个名为 `myls.sh` 的 shell 脚本文件,内容如下:
```
#!/bin/bash
args=("ls" "-l")
execvp "ls" args
```
上述代码中,我们首先声明了一个数组 args,其中 args[0] 为 "ls",args[1] 为 "-l"。接着使用 execvp 函数来执行 ls 命令,第一个参数为命令名,第二个参数为参数数组。
接下来,需要给脚本文件添加可执行权限,可以执行以下命令:
```
chmod +x myls.sh
```
最后,您可以在命令行中运行该脚本,执行以下命令:
```
./myls.sh
```
运行后,您应该会看到当前目录下的文件列表以及详细信息。
struct tm *tm; struct stat myls;
`struct tm` 和 `struct stat` 是两种在 C 语言中常见的数据结构,它们分别对应于时间和文件状态信息。
`struct tm` 是 C 标准库 `<time.h>` 中用于存储时间的相关信息的结构体,它通常与 `localtime()` 和 `gmtime()` 等函数一起使用,用于把 `time_t` 类型的时间戳按照特定格式分解成年、月、日等元素,便于用户理解和操作。它的典型形式如下:
```c
typedef struct {
int tm_year; // 从1900年开始的年份
int tm_mon; // 月份,范围是0(January)到11
int tm_mday; // 月份中的日期
int tm_hour; // 小时,24小时制
int tm_min; // 分钟
int tm_sec; // 秒
int tm_wday; // 星期几,范围是0(Sunday)到6
int tm_yday; // 当年的第几天
int tm_isdst; // DST(夏令时)标志
} tm;
```
`struct stat` 则是由 `sys/stat.h` 提供的,用于获取文件或目录的基本属性,例如大小、权限、创建和修改时间等。例如:
```c
struct stat {
dev_t st_dev; // 设备 ID
ino_t st_ino; // 物理索引节点号
mode_t st_mode; // 权限和文件类型
nlink_t st_nlink; // 链接数
uid_t st_uid; // 用户ID
gid_t st_gid; // 组ID
off_t st_size; // 文件大小(字节)
... // 其他时间戳如st_atime、st_mtime和st_ctime
};
```
这里的 `st_mtime` 就是指 `mtime` 时间戳,即最后一次修改时间。
阅读全文