首页 > 系统相关 >【c&c++】 linux C之basename, dirname函数

【c&c++】 linux C之basename, dirname函数

时间:2022-11-01 14:11:58浏览次数:37  
标签:include basename c++ nginx usr conf dirname

环境(centos 6.10):

$ uname -r
2.6.32-754.el6.x86_64

函数定义:

// /usr/include/libgen.h
extern char *__xpg_basename (char *__path) __THROW;
#define basename        __xpg_basename

这个basename函数可以返回路径最后一个路径分隔符之后的内容,
比如basename("/usr/local/abc") 返回 abc.

调用示例如下:

#include <stdio.h>
#include <libgen.h>

int main(int argc, char *argv[]) {
    char* files[] = {
        "/usr/local/nginx/conf/nginx.conf",
        "./a.out",
        "/usr/include/libgen.h",
        NULL
    };

    char **p = files;

    while (*p) {
        printf("basename(\"%s\")=%s\n", *p, basename(*p));
        *p++;
    }
    return 0;
}

编译运行:

$ gcc basename.c
$ ./a.out
basename("/usr/local/nginx/conf/nginx.conf")=nginx.conf
basename("./a.out")=a.out
basename("/usr/include/libgen.h")=libgen.h

直观点理解, 就是输出“文件名”。

shell下有个命令, 也叫basename, 用法一样, 示例:

$ for i in /usr/local/nginx/conf/nginx.conf ./a.out /usr/include/libgen.h; do basename $i; done
nginx.conf
a.out
libgen.h

还有个叫dirname的函数, 也在libgen.h中:

extern char *dirname (char *__path) __THROW;

dirname用法和basename一样, 不过它返回的是除去"文件名"之外的目录名. 同名的命令dirname也是同样的功能, 一看就明白:

$ for i in /usr/local/nginx/conf/nginx.conf ./a.out /usr/include/libgen.h; do dirname $i; done
/usr/local/nginx/conf
.
/usr/include

这个dirname命令有个惯用法, 就是获取当前脚本所在路径:

scriptDir=$(cd `dirname $0`; pwd)

这样不管代在哪里执行这个脚本, $scriptDir的值都可以取得你执行时的目录名. 非常实用.

标签:include,basename,c++,nginx,usr,conf,dirname
From: https://www.cnblogs.com/opensmarty/p/16847495.html

相关文章

  • node3_path.join和path.basename、path.extname用法
    constpath=require('path')//../会抵消一级路径constpathStr=path.join('/a','/b/c','../','./d','e')console.log(pathStr)//凡是涉及到路径拼接的问题,都要......
  • c++11新增容器 array
    array中数据存于栈中 ......
  • 【C++】【纯代码】获取电脑的mac地址
    boolGetMacAddress(CString&LanMAC){#defineMAX_ADAPTER_NAME_LENGTH256#de......
  • C++的第一个程序
    #include<iostream>usingnamespacestd;intmain(){ cout<<"helloworld"<<endl; system("pause"); return0;}菜鸡,第一次用C++敲代码,记录一下心得:代......
  • C++——KMP算法
    ......
  • C++常用命名法与书写规范
    常用命名法有三种:​​驼峰命名法​​​、​​匈牙利命名法​​​、​​帕斯卡命名法​​。 这三种命名方法各有千秋,以庄子的齐物论来说就是“道无终始,物有死生,不恃其成”。......
  • C++案例
    错误1:类加了括号 错误2:内存泄漏:  源代码:    ......
  • C++面向对象高级开发(六)写好一个String类
    类的内部:public:构造函数、拷贝构造、拷贝赋值、析构函数的接口和辅助函数以及它的实现private:参数  类的外部:内联:inline构造函数:判断是否有初值:有初值:分配......
  • C++ 11 random库
    C++11random库random库的组件主要有随机数引擎和随机数分布引擎随机数引擎类类名:default_random_engine声明方法:类名对象名随机数引擎类是可以独立运行的随机数......
  • Qt on Android 开发之 C++与Java 交互
    目录​​简述​​​​Qt引入Android模块​​​​Java示例​​​​Cpp与java交互​​简述我做了一个小例子,来实现了C++与Java之间的交互。该示例是以整形和字符型举例说明,......