C++ 之 linux环境下路径操作
获取当前运行程序绝对路径
#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环境下路径操作相关推荐
- Java练习-----2.对Windows和Linux环境下输入的文件路径格式进行校验
1.需求 Windows环境下路径格式只能为 D:\Desktop\source Linux环境下路径格式只能为 /data/source 2.结果展示 Linux环境下运行成功,懒得开虚拟机,就不展 ...
- 【Chrome浏览器插件开发】浏览器插件运行机制02之实战开发出一款Google浏览器插件——含源码全部过程 (建议在Linux环境下)
一.浏览器插件配置文件 manifest.json入门 每个浏览器插件都有一个 JSON 格式的文件,叫做 manifest.json,里面提供了插件的描述信息. manifest.json 文件本质 ...
- linux环境下从路径字符串中截取目录和文件名信息
文章目录 前言 使用系统命令完成路径截取 使用 basename 命令获取文件名 使用 dirname 命令获取目录名 利用变量提取操作完成截取 截取根目录 截取文件名 截取文件后缀 截取文件所在的目 ...
- linux环境下使用sort命令完成常见排序操作
文章目录 前言 命令作用 常见选项 数据文件 核心参数 用法展示 按照指定列排序 将排序结果存入指定文件 查看文件是否已经排序好 去掉排序结果中的重复行 按照数值结果进行排序 反向排序 自定义分割字符 ...
- linux svn更换数据仓库,Linux环境下SVN数据仓库迁移
上一篇文章介绍了Windows环境下SVN数据的备份与还原,这篇文章介绍下Linux环境下数据迁移. 一准备工作 1安装环境 1 centOS7 2可上网 2软件需求 1 winSCP 2 PuTTy ...
- linux 普通用户退出vim,Linux环境下VI/VIM编辑文件时无权限保存的解决方法(普通用户)...
在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有s ...
- linux环境下c语言的学习--linux下的基本操作
linux环境下c语言学习 星期一 _代表空格 1.在linux下打开一个终端:ctrl+alt+t 多次使用可打开多个终端. 2.创建一个文件夹:mkdir_ abc ...
- linux彻底卸载multipath,深度分析LINUX环境下如何配置multipath
首先介绍一下什么是多路径(multi-path)?先说说多路径功能产生的背景,在多路径功能出现之前,主机上的硬盘是直接挂接到一个总线(PCI)上,路径是一对一的关系,也就是一条路径指向一个硬盘或是存储 ...
- Linux 环境下FC(SAN)磁盘在线删除
转自 EMC 中文支持论坛 – https://community.emc.com/go/chinese 本文主要介绍 Linux 环境下 FC 磁盘在线删除 磁盘删除 在删除磁盘之前,建议先备份好数 ...
最新文章
- 对字符数组输入输出数组名是否加取地址符的一些理解
- MediaCodeC解码视频指定帧,迅捷、精确
- 字节二面:GET 请求能上传图片吗?我蒙了。。
- android 编译 oserror,Android-4.4.2 编译出错 OSError: [Errno 2] No such file or directory
- 脚本标记 - 异步和延迟
- C++继承中析构函数 构造函数的调用顺序以及虚析构函数
- 温州大学《深度学习》课程课件(一)
- C# 函数重载 示例 求圆的面积
- [补档]暑假集训D2总结
- C++实现dijkstra单源最短路径
- 面向Tableau开发人员的Python简要介绍(第4部分)
- 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制
- nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
- 项目日报模板_韶州中学项目建设正酣 ,计划明年9月投入使用
- 吴恩达深度学习C4W1(Pytorch)实现
- 密码学专题 非对称加密算法指令概述 DH算法指令
- 息屏录像软件下载地址和教程
- 求多个数最小公倍数的一种变换算法(未看)
- 地图定位技术揭秘(一)
- c语言int型是什么意思,在c语言中,int代表什么意思
热门文章
- Linux服务器上传 .class用base64加密,转换文件到服务器的技巧
- 利用python制作一个名片_教你做一张能运行 Python 的名片,成本只要20元!
- Window SendMessage,PostMessage分析
- TR-069 协议简介
- python安装opencc包失败
- 执行python代码的方式_涨见识了,在终端执行 Python 代码的 6 种方式!
- 快速排序(详细讲解)
- 用Xbee实现Arduino之间的无线通信,远程控制小灯
- 做好公司各部门数据报表支撑的几个简单思维
- 10个程序员可以接私活的平台和一些建议,兼职必看