一起talk C栗子吧(第七十四回:C语言实例--DIY cd命令)



各位看官们,大家好,上一回中咱们说的是DIY pwd命令的例子,这一回咱们说的例子是:DIY cd命令。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,在Linux系统中,终端提供的cd命令是我们最常用的命令之一,相信大家对它一定很熟悉了。今天,让我们一起来DIY cd命令吧。下面是具体的操作步骤:

  • 1.从用户输入的内容中提取路径名称;
  • 2.把刚才获取的路径名称传递给chdir函数,使用该函数切换到名称所在的目录中;
  • 3.确认函数运行的结果,如果不能切换,给用户一个提示。

下面是我们DIY cd命令的代码,请大家参考:

int cds(const char *p)
{
    char path[PATH_SIZE];
    char *start;
    char *end;
    int res;
    int n= 0;

    memset(path,‘\0‘,PATH_SIZE); // must init ,ohtrway there is a wrong result with @

    start = strchr(p,‘ ‘);
    end = strchr(p,‘\n‘);
    if(!start || !end)
    {
        printf("can‘t support this format \n");
        return 1;
    }

    strncpy(path,p+3,end-start-1); // get the path in inputting command

    res = chdir(path); //change dir

    if(res != 0)
        printf("%s is nod a path,please check again \n",path);

    return res;
}

从上面的代码中,我们可以看到,在从用户输入内容里提取路径的过程中,我们使用了空格和换行符作为提取的标记。在cd后面有一个空格,这是cd命令的格式。另外,我们使用了fgets来获取用户输入的内容。该函数会在用户输入内容后面添加一个换行符和空字符。鉴于这两个特点,我们在代码中充分利用了空格和换行符来提取用户输入内容中的路径。如果用户输入的内容里没有这两个特点,那么说明输入的格式不正确,需要提示用户。

此外,我们再说一下chdir函数,它是Linux系统提供的函数,它可以把当前工作目录切换到传递给它的参数所指的目录中。如果切换成功返回零,否则返回非零值。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。该函数需要与前面章回中的main.c和main.h一起配合使用。

下面是程序的运行结果,请大家参考:

|->pwd                  //首先使用pwd命令来显示当前路径
/home/talk8/Shell       //显示当前路径
|->cd /etc/             //切换到 /etc/目录中
|->pwd                  //使用pwd命令来显示当前路径
/etc                    //当前路径是 /etc/,说明切换成功
|->cd /hello/           //打开错误的路径
/hello/ is nod a path,please check again   //提示路径错误
|->                     //等待用户重新输入

各位看官,关于DIY cd命令的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


时间: 12-10

一起talk C栗子吧(第七十四回:C语言实例--DIY cd命令)的相关文章

一起talk C栗子吧(第七十七回:C语言实例--DIY ls命令续)

各位看官们,大家好,上一回中咱们说的是DIY cat命令的例子,这一回咱们说的例子是:DIY ls命令续.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面的章回中DIY过ls命令,时间不长,相信大家还有印象.咱们今天是对前面章回的补充,主要是对ls命令进行了扩展,使其在原来的基础上又可以支持l参数. 我们新增加了对l参数的支持,下面是具体的操作过程 ,请大家参考: 1.使用stat函数从文件中获取文件的属性: 2.依据属性中的st_mode值来判断文件的类型,比如目录,链接,管道等

一起talk C栗子吧(第七十三回:C语言实例--DIY pwd命令)

各位看官们,大家好,上一回中咱们说的是DIY date命令的例子,这一回咱们说的例子是:DIY pwd命令.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,经常切换目录的时候,就会有不知道现在位于哪个目录下的感觉,这个时候就需要使用PWD命令来显示当前在哪个目录中.今天,我们一起来DIY PWD命令. 下面是DIY PWD命令的具体步骤: 1.使用getcwd函数获取当前的路径: 2.输出步骤1中获取到的路径. 下是我们DIY PWD命令的代码,请参考: int pwds() { c

一起talk C栗子吧(第十四回:C语言实例--循环链表)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们说的是单链表链式存储列的例子,这一回咱们说的例子是:循环链表. 看官们,循环链表也是链表的一种,只不过该链表的头部和尾部相连接,所以构成了一个循环链,因此叫 作循环链表.让我们一起对比一下单链接与循环链表的不同之处:单链表的尾结点哪里也没有指,因为它 的next指针值为空.循环链表的尾结点指向了它的头结点. 看官们,正文中就不写代码了,详

一起talk C栗子吧(第十二回:C语言实例--单链表一)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们没有说具体的例子,而且是说了例子中的文件组织结构.这一回咱们继续说C例子, 说的例子是链表,更准确的说法叫作单链表.咱们不但要说C例子,而且会在例子中使用上一回中说过的 文件组织结构,就当作是举例说明文件组织结构的使用方法. 有点一石二鸟的感觉,哈哈. 链表定义 看官们,所谓的链表其实就是一组元素通过一定的方式链接在一起.比如我们坐的火车

一起talk C栗子吧(第一百七十四回:C语言实例--关闭终端中的缓冲功能二)

各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们, 我们在上一回中介绍了如何关闭终端中的缓冲功能,当时是借助系统命令stty实现该功能的,这一回中我们将介绍另外一种关闭终端中回显功能的方法.该方法是通过终端的termios编程接口来操作终端的.关于termios接口的介绍和编程接口,我们在一百七十一回中介绍过了,因此,我们直接介绍如何通过termios编程接口来关闭终端缓冲功能. 下面是详细的操作步

一起talk C栗子吧(第二十二回:C语言实例--队列一)

各位看官们,大家好,上一回中咱们说的是表达式求值的例子,该例子使用了栈,这一回咱们说的是栈的 兄弟:队列.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在这里说的队列是一种抽象的数据结构,大家不用想的太抽象了,哈哈,其实它和我们日常生活中所 见的队列一样.不管怎么样,我们还是举一个容易理解的例子:大家在假期出去旅游的时候,都有过排队 买门票的经历吧.游客们在售票点的窗口前排成了一长串队列,售票人员先把门票卖给排在队列前面的游 客,买到门票的游客拿着门票兴高采烈地离开了队列,刚来到售票点

一起talk C栗子吧(第二十四回:C语言实例-顺序查找)

各位看官们,大家好,上一回中咱们说的是与队列相关的例子,这一回咱们说的例子是:顺序查找.闲话 休提,言归正转.让我们一起talk C栗子吧! 看官们,在编写程序中,我们经常需要查找我们想要元素.就好比你想要在互联网中查找什么东西时,肯 定会使用百度或者google去搜索. 查找是最常用使用的功能,我们今天就来说说查找的方法:顺序查找.为了让大家容易理解查找方法,我 们把查找的范围限定为某些容器,这些容器可以是我们前面说过的链表,栈,队列 .查找的内容就是这些 容器中的某个元素. 有了我们约定的这

七十四、expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、

七十四.expect脚本同步文件.expect脚本指定host和要同步的文件.构建文件分发系统.批量远程执行命令 一.expect脚本同步文件 自动同步文件,在一台机器上同步文件到另一台机器上去.核心命令是rsync [[email protected] sbin]# vim 4.expect     路径:/usr/local/sbin/ #!/usr/bin/expect set passwd "1346" spawn rsync -av [email protected]:/tm

JVM【第十四回】:【回收方法区】

很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾手机,而且在方法区进行垃圾收集的"性价比"一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~90%的空间,而永久代的垃圾收集效率远低于此. 永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类.回收废弃常量与回收Java堆中的对象非常类似.以常量池中字面量的回收为例,假如一个字符串"abc"已经进入了常