获取当前运行程序绝对路径

#include<iostream>
#include"unistd.h"
#include"string"
using namespace std;int main(int argc,char **argv)
{char buf[512];int length =readlink("/proc/self/exe",buf,sizeof(buf));if(length<=0){}string curpath;curpath.append((char*) &buf,length);cout<<curpath<<endl;return 0;
}

结果:

获取运行程序所在目录的filename文件的完整路径

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>int main(){const char *file_name = "filename";char abs_path_buff[PATH_MAX] = {0};//获取文件路径, 填充到abs_path_buff//realpath函数返回: null表示获取失败; 否则返回指向abs_path_buff的指针if(realpath(file_name, abs_path_buff)){printf("%s %s\n", file_name, abs_path_buff);}else{printf("the file '%s' is not exist\n", file_name);}return 0;
}

结果:

三种获取运行程序目录方法

#include <stdio.h>
#include <string.h>
#include <unistd.h>int main(void)
{char buffer[1024] = {0};//获取当前的工作目录,注意:长度必须大于工作目录的长度加一char *p = getcwd(buffer , sizeof(buffer));  //deprecatedprintf("buffer:%s   p:%s size:%d  \n" , buffer , p , strlen(buffer));//获取当前工作目录的名字char *dir = NULL;dir = (char *)get_current_dir_name();  //建议使用printf("dir:%s \n" , dir);free(dir);char *twd = NULL ; memset(buffer,0,sizeof(buffer));twd = getwd(buffer);          //dangerousprintf("buffer:%s   twd:%s \n" , buffer , twd);return 0 ;
}

结果:

创建目录

#include <sys/stat.h>
#include <sys/types.h>
#include <iostream>
using namespace std;int main()
{int status;//创建权限为775权限的目录;返回0 表示成功, 返回 -1表示错误,并且会设置errno值status = mkdir("/home/newdir", S_IRWXU | S_IRWXG | S_IROTH |S_IXOTH);cout<<"status: "<<status<<endl;return 0;
}

结果:

说明,为什么和我们设置的权限不一样,因为有umask,所以,想要创建我们设置的权限,先要执行umask函数。
mode_t umask(mode_t mask); //umask(066);

删除目录

#include<unistd.h>
int rmdir(const char *path_name);

使用rmdir函数时,目录必须为空,否则调用失败,函数返回-1.成功时,函数返回0

目录文件的打开/关闭/读取

相关函数及头文件
#include<dirent.h>
DIR *opendir(const char *path_name);  //打开目录
int closedir(DIR *dp);   //关闭目录
struct dirent *readdir(DIR *dp); //读取目录

示例代码:

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
#include <time.h>
int main()
{struct stat statbuf;DIR *dir=opendir("testdir");dirent* dip;while ((dip = readdir(dir))!=NULL){   lstat(dip->d_name, &statbuf);printf("%s , %s\n", dip->d_name,   ctime(&statbuf.st_atime));}return 0;
}

遍历目录及目录下所有文件及目录

#include<dirent.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<stdio.h>static void printDir(const char* dirname){struct dirent* filename;DIR* dir;char path[100] = {0};    //这里限制了路径长度dir = opendir(dirname);if(dir == NULL){printf("dir open file");return;}while((filename = readdir(dir)) != NULL){//排除当前目录和上一级目录if(!strcmp(filename->d_name, ".") || !strcmp(filename->d_name, "..")){continue;}sprintf(path, "%s/%s", dirname, filename->d_name);//获取文件属性struct stat s;if(lstat(path, &s)<0){printf("get status is fail.\n");printf(path);}//判断是否为目录,如果是目录递归调用if(S_ISDIR(s.st_mode)){printf("find dir : %s\n", path);printDir(path);}else{printf("file: %s/%s\n", dirname, filename->d_name);}}closedir(dir);
}int main()
{printDir("/home/xtms/redis");return 0;
}

结果:

find dir : /home/xtms/redis/etc
file: /home/xtms/redis/etc/redis.conf
find dir : /home/xtms/redis/bin
file: /home/xtms/redis/bin/redis-benchmark
file: /home/xtms/redis/bin/redis-check-rdb
file: /home/xtms/redis/bin/redis-sentinel
file: /home/xtms/redis/bin/redis-cli
file: /home/xtms/redis/bin/redis-check-aof
file: /home/xtms/redis/bin/redis-server
find dir : /home/xtms/redis/log

切换工作路径

函数及头文件介绍
#include<unistd.h>
int chdir(const char *path_name);   //切换工作路径

示例代码:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
int main()
{char tmp[200];        getcwd(tmp,200);printf("%s\n", tmp);int res = chdir("/testdir");if (res==-1){printf("cd dir falid!\n");}else{char npath[200];        getcwd(npath,200);printf("%s\n", npath);}return 0;
}

结果:

C++ 之 linux环境下路径操作相关推荐

  1. Java练习-----2.对Windows和Linux环境下输入的文件路径格式进行校验

    1.需求 Windows环境下路径格式只能为 D:\Desktop\source Linux环境下路径格式只能为 /data/source 2.结果展示 Linux环境下运行成功,懒得开虚拟机,就不展 ...

  2. 【Chrome浏览器插件开发】浏览器插件运行机制02之实战开发出一款Google浏览器插件——含源码全部过程 (建议在Linux环境下)

    一.浏览器插件配置文件 manifest.json入门 每个浏览器插件都有一个 JSON 格式的文件,叫做 manifest.json,里面提供了插件的描述信息. manifest.json 文件本质 ...

  3. linux环境下从路径字符串中截取目录和文件名信息

    文章目录 前言 使用系统命令完成路径截取 使用 basename 命令获取文件名 使用 dirname 命令获取目录名 利用变量提取操作完成截取 截取根目录 截取文件名 截取文件后缀 截取文件所在的目 ...

  4. linux环境下使用sort命令完成常见排序操作

    文章目录 前言 命令作用 常见选项 数据文件 核心参数 用法展示 按照指定列排序 将排序结果存入指定文件 查看文件是否已经排序好 去掉排序结果中的重复行 按照数值结果进行排序 反向排序 自定义分割字符 ...

  5. linux svn更换数据仓库,Linux环境下SVN数据仓库迁移

    上一篇文章介绍了Windows环境下SVN数据的备份与还原,这篇文章介绍下Linux环境下数据迁移. 一准备工作 1安装环境 1 centOS7 2可上网 2软件需求 1 winSCP 2 PuTTy ...

  6. linux 普通用户退出vim,Linux环境下VI/VIM编辑文件时无权限保存的解决方法(普通用户)...

    在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有s ...

  7. linux环境下c语言的学习--linux下的基本操作

    linux环境下c语言学习 星期一 _代表空格 1.在linux下打开一个终端:ctrl+alt+t       多次使用可打开多个终端. 2.创建一个文件夹:mkdir_ abc           ...

  8. linux彻底卸载multipath,深度分析LINUX环境下如何配置multipath

    首先介绍一下什么是多路径(multi-path)?先说说多路径功能产生的背景,在多路径功能出现之前,主机上的硬盘是直接挂接到一个总线(PCI)上,路径是一对一的关系,也就是一条路径指向一个硬盘或是存储 ...

  9. Linux 环境下FC(SAN)磁盘在线删除

    转自 EMC 中文支持论坛 – https://community.emc.com/go/chinese 本文主要介绍 Linux 环境下 FC 磁盘在线删除 磁盘删除 在删除磁盘之前,建议先备份好数 ...

最新文章

  1. 对字符数组输入输出数组名是否加取地址符的一些理解
  2. MediaCodeC解码视频指定帧,迅捷、精确
  3. 字节二面:GET 请求能上传图片吗?我蒙了。。
  4. android 编译 oserror,Android-4.4.2 编译出错 OSError: [Errno 2] No such file or directory
  5. 脚本标记 - 异步和延迟
  6. C++继承中析构函数 构造函数的调用顺序以及虚析构函数
  7. 温州大学《深度学习》课程课件(一)
  8. C# 函数重载 示例 求圆的面积
  9. [补档]暑假集训D2总结
  10. C++实现dijkstra单源最短路径
  11. 面向Tableau开发人员的Python简要介绍(第4部分)
  12. 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制
  13. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  14. 项目日报模板_韶州中学项目建设正酣 ,计划明年9月投入使用
  15. 吴恩达深度学习C4W1(Pytorch)实现
  16. 密码学专题 非对称加密算法指令概述 DH算法指令
  17. 息屏录像软件下载地址和教程
  18. 求多个数最小公倍数的一种变换算法(未看)
  19. 地图定位技术揭秘(一)
  20. c语言int型是什么意思,在c语言中,int代表什么意思

热门文章

  1. Linux服务器上传 .class用base64加密,转换文件到服务器的技巧
  2. 利用python制作一个名片_教你做一张能运行 Python 的名片,成本只要20元!
  3. Window SendMessage,PostMessage分析
  4. TR-069 协议简介
  5. python安装opencc包失败
  6. 执行python代码的方式_涨见识了,在终端执行 Python 代码的 6 种方式!
  7. 快速排序(详细讲解)
  8. 用Xbee实现Arduino之间的无线通信,远程控制小灯
  9. 做好公司各部门数据报表支撑的几个简单思维
  10. 10个程序员可以接私活的平台和一些建议,兼职必看