文件状态获取
stat函数
- 函数原型
int stat(const char *path, struct stat *buf);
- 可获取的成员信息
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */ //指的是修改文件内容
time_t st_ctime; /* time of last status change */ //指的是修改inode属性
};
//示例
int getSize(char *filename)
{
struct stat statbuf;
stat(filename,&statbuf);
unsigned int size=statbuf.st_size;
if(size<0)
return 0;
return size;
}
access函数
-
常见场景
检测文件状态,以便后续读、写、执行、状态获取等操作。 -
依赖的头文件
#include <unistd.h>
#include <stdio.h>
- 函数原型
int access(const char *pathname, int mode);
- 相关参数
pathname ----需要被检测的文件名
mode -----需要的操作模式
常见操作模式如下:
R_OK —文件是否可读
W_OK —文件是否可写
X_OK —文件是否可执行
F_OK —文件是否存在
返回值:
成功返回0,失败返回-1
system函数
功能:
执行shell脚本 或者 执行Linux控制台命令
函数原型
int system(const char *command);
返回值:
成功:对于指令返回进程退出码,对于shell脚本返回脚本返回值;失败 对于指令返回-1,对于shell脚本返回127。
示例:
int ret = system("./test.sh");
int res = system("mkdir testFileDir");
自定义文件操作函数
//获取改文件所有内容到string中
int getStrFromFile(const char* fileName,std::string& oData)
{
FILE* fp= fopen(fileName,“rb”);
if (fp==NULL)
{
return -1;
}
static char linebuff[128];
fseek(fp,0L,SEEK_SET);
while(!feof(fp))
{
if( fgets(linebuff,sizeof(linebuff)-1,fp) != NULL)
{
oData.append(linebuff);
}
}
fclose(fp);
return 0;
}
//替换string内的内容
string replaceMacstr(string &oData)
{
string newmac;
int pos;
pos = oData.find("😊;
while(pos != -1)
{
// str.length()求字符的长度,注意str必须是string类型
oData.replace(pos,string("😊.length(),"-"); // 把":“替换未”-"
pos = oData.find("😊;
}
newmac = oData;
return newmac;
}