⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd.c

📁 linux——shell nachos 的课程设计 第一个
💻 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 + -