📄 cmd.c
字号:
#include "cmd.h"
#include "common.h"
#include "buildin.h"
int m_cd(char *argv[])
{
char *newdir;
if (!argv[1])
newdir = getenv("HOME");
else
newdir = argv[1];
__cd(newdir);
return 0;
}
int m_jobs(char *argv[])
{
char *status_str;
JOB *job;
for (job = job_list.head; job; job = job->next) {
if (job->running_progs == job->stopped_progs)
status_str = "Stopped";
else
status_str = "Running";
printf(JOB_STATUS_FORMAT, job->id, status_str, job->text);
}
return 0;
}
int m_fgbg(char *argv[])
{
int i, job_num;
JOB *job;
if (argv[1]) {
if (sscanf(argv[1], "%%%d", &job_num) != 1) {
fprintf(stderr, " %s: bad argument '%s'\nusage: %s %[job]\n",
argv[0], argv[1], argv[0]);
return 1;
}
} else if (job_list.head) {
job_num = job_list.head->id;
} else {
fprintf(stderr, " %s: current no such job\n", argv[0]);
return 1;
}
for (job = job_list.head; job; job = job->next)
if (job->id == job_num)
break;
if (!job) {
fprintf(stderr, "%s: unknown job %d\n", argv[0], job_num);
return 1;
}
if (*argv[0] == 'f') {
if (tcsetpgrp(STDIN_FILENO, job->pgrp))
perror("tcsetpgrp");
job_list.fg = job;
}
for (i = 0; i < job->num_progs; i++)
job->progs[i].is_stopped = 0;
kill(-job->pgrp, SIGCONT);
job->stopped_progs = 0;
return 0;
}
int m_pwd(char *argv[])
{
printf("%s\n", __pwd());
return 0;
}
int m_dir(char *argv[])
{
char path[BUFF_SIZE];
char *path_name;
if(!argv[1]) {
getcwd(path, BUFF_SIZE);
path_name = path;
}
else
path_name = argv[1];
__dir(path_name);
return 0;
}
int m_time(char *argv[])
{
printf("%s", __time("%P %X\n"));
return 0;
}
int m_date(char *argv[])
{
const char *fmt = "%a %b %d %X %Z %Y\n";
printf("%s", __time(fmt));
return 0;
}
int m_ren(char *argv[])
{
if (!argv[2]) {
fprintf(stderr, "usage: ren [oldname] [newname]\n");
return 1;
}
if (access(argv[2], F_OK) == 0) {
fprintf(stderr, "%s had existed\n", argv[2]);
return 1;
}
if (access(argv[1], F_OK) < 0) {
fprintf(stderr, "%s: %s\n", argv[1], strerror(errno));
return 1;
}
__ren(argv[1],argv[2]);
return 0;
}
int m_md(char *argv[])
{
if (!argv[1]) {
fprintf(stderr, "usage: mkdir [directory]\n");
return 1;
}
__md(argv[1]);
return 0;
}
int m_find(char *argv[])
{
char *path;
if (!argv[2]) {
printf("usage: find [directory] [filename]\n");
return 1;
}
if (*argv[1] != '\\') {
__cd(argv[1]);
path = __pwd();
}
else
path = argv[1];
__find(path, argv[2]);
return 0;
}
int m_more(char *argv[])
{
int fd;
if (!argv[1]) {
fprintf(stderr, "usage: more [filename]\n");
return 1;
}
if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror("open()");
return 1;
}
__more(fd);
return 0;
}
int m_del(char *argv[])
{
int i;
if (!argv[1]) {
fprintf(stderr, "usage: del [file|directory]\n");
return 1;
}
for (i = 1; argv[i]; i++)
__del(argv[i]);
return 0;
}
int m_copy(char *argv[])
{
if (!argv[2]) {
printf("usage:copy [source] [destination]");
return 1;
}
__copy(argv[2], argv[1]);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -