wordpress定時插件seo是什么意思seo是什么職位
一、對目錄操作
1,打開目標(biāo)目錄?
2.讀取目錄,, ?
3.關(guān)閉目錄?
目錄 當(dāng)文件看,只不過操作函數(shù)和操作文件函數(shù)不一樣。
*1.opendir
DIR *opendir(const char *name);
功能:打開一個目錄獲得一個目錄流指針
參數(shù):name:目錄名
返回值:
?? ?成功返回目錄流指針
?? ?失敗返回NULL
*2.readdir
struct dirent *readdir(DIR *dirp);
功能:
?? ?從目錄流中讀取文件信息并將保存信息的結(jié)構(gòu)體
?? ?地址返回
參數(shù):
?? ?dirp:目錄流指針
返回值:
? ??成功時,readdir
函數(shù)返回一個指向struct dirent
結(jié)構(gòu)體的指針,該結(jié)構(gòu)體包含了目錄中的一個條目的信息,如文件名、文件類型等。
?? 出錯或者讀到目錄流末尾返回NULL
*3、closedir
?int closedir(DIR *dirp);
?功能:關(guān)閉之前已經(jīng)打開的目錄流對象
?參數(shù):opendir的返回結(jié)果中目錄流對象
?返回值:成功 ?0
??? ??? ?失敗 ? -1;
練習(xí):打印當(dāng)前目錄下的信息
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char *argv[])
{DIR * dir = opendir("./"); //使用opendir("./")打開當(dāng)前目錄(.表示當(dāng)前目錄)if(NULL == dir){fprintf(stderr,"opendir error\n");return 1;}while(1){struct dirent * info = readdir(dir);if(NULL == info){break;}switch(info->d_type){case DT_DIR:printf("目錄文件 ");break;case DT_REG:printf("普通文件 ");break;case DT_UNKNOWN:printf("其他文件 ");break;default:printf("未知文件 ");}printf("%s\n",info->d_name);}closedir(dir);return 0;
}
printf("%s\n", info->d_name);
?這行代碼用于打印出由?readdir()
?函數(shù)返回的?struct dirent
?結(jié)構(gòu)體中?d_name
?成員所指向的字符串,即當(dāng)前目錄條目的名稱(文件名或子目錄名)。
struct dirent
?是用于表示目錄條目的結(jié)構(gòu)體,它通常包含以下成員(但具體成員可能因系統(tǒng)而異):
d_ino
:文件的inode號(在某些系統(tǒng)上可能不存在)。d_off
:在目錄文件中的偏移量(用于內(nèi)部遍歷,通常不對用戶程序公開)。d_reclen
:d_name
?字段的長度(不包括結(jié)尾的null字符),但在現(xiàn)代系統(tǒng)中這個字段可能不再使用。d_type
:文件類型(如目錄、普通文件等)。d_name
:一個以null結(jié)尾的字符串,表示目錄條目的名稱。
二、有關(guān)目錄的函數(shù)
1.chdir? (cd)
chdir ("/home/linux"); "../../"
fopen("1.mp4")
int chdir(const char *path);// /home/linux
功能:?改變當(dāng)前程序的工作路徑
參數(shù):path:改變到的路徑
返回值:
?? ?成功返回0
?? ?失敗返回-1
2.getcwd (pwd)?
char *getcwd(char *buf, size_t size);
功能:獲得當(dāng)前的工作路徑
參數(shù):
?? ?buf:保存工作路徑空間的首地址
?? ?size:保存路徑空間的長度
返回值:
?? ?成功返回包含路徑空間的字符串首地址
?? ?失敗返回NULL
練習(xí):打印當(dāng)前目錄,打印上一級目錄
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{char buf[256]={0};getcwd(buf,sizeof(buf));printf("current path is %s\n",buf);chdir("../");getcwd(buf,sizeof(buf));printf("change path is %s\n",buf);return 0;
}
練習(xí):指定目錄下的? .c的文件
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
// ./a.out ../
int main(int argc, char *argv[])
{if(argc<2){fprintf(stdout,"usage:./a.out dirname\n");return 1;}DIR * dir = opendir(argv[1]);if(NULL == dir){fprintf(stderr,"opendir errpr\n");return 1;}while(1){struct dirent * info = readdir(dir);if(NULL == info){break;}// .if(strlen(info->d_name)>=3){t=strlen(info->d_name)if(0== strcmp(&info->d_name[t-2],".c")) //strcmp(&info->d_name[t-2]定位到倒數(shù)第二位'.'{printf("%s\n",info->d_name);}}}closedir(dir);return 0;
}
3.mkdir?
int mkdir(const char *pathname, mode_t mode);
const char *pathname
:指向以 null 結(jié)尾的字符串的指針,該字符串指定了要創(chuàng)建的目錄的路徑名。mode_t mode
:指定新目錄的權(quán)限。這些權(quán)限由文件模式創(chuàng)建掩碼(umask)修改,以限制新目錄的權(quán)限。如 0666 0777? ? ? ? ? ? ? ? ? ? mode & ~umask ?0002- 返回值:
?? ?成功返回0
?? ?失敗返回-1
4.rmdir
int rmdir(const char *pathname);
功能:刪除一個空目錄文件
參數(shù):pathname:目錄文件的名字
返回值:
?? ?成功返回0
?? ?失敗返回-1
目錄中有其他文件時用?rm -fr
*5.stat
int ?stat(const ?char ?*path, struct stat *buf);
功能:
?? ?獲得文件的屬性
參數(shù):
?? ?path: 文件的路徑
?? ?buf: ?屬性存放空間的首地址
返回值:
?? ?成功返回0
?? ?失敗返回-1
struct stat?*buf
:指向?stat
?結(jié)構(gòu)體的指針,該結(jié)構(gòu)體用于存儲?path
?指定的文件或目錄的狀態(tài)信息。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> struct stat { dev_t st_dev; // 設(shè)備ID(文件所在的設(shè)備) ino_t st_ino; // 節(jié)點(diǎn)號(inode號) mode_t st_mode; // 文件類型和權(quán)限 nlink_t st_nlink; // 鏈接數(shù)(有多少文件名指向這個節(jié)點(diǎn)) uid_t st_uid; // 用戶ID(文件所有者的用戶ID) gid_t st_gid; // 組ID(文件所有者的組ID) dev_t st_rdev; // 設(shè)備類型(如果文件是設(shè)備) off_t st_size; // 文件大小(以字節(jié)為單位) blksize_t st_blksize; // 文件系統(tǒng)I/O的塊大小 blkcnt_t st_blocks; // 分配給文件的塊數(shù) // 以下成員與時間相關(guān) time_t st_atime; // 最后訪問時間 time_t st_mtime; // 最后修改時間 time_t st_ctime; // 最后狀態(tài)改變時間(例如權(quán)限或所有權(quán)) // POSIX.1-2008 增加了以下成員 #ifdef _POSIX_C_SOURCE // ... 可能包含額外的成員,如 st_birthtime(文件的創(chuàng)建時間,如果支持) #endif
};
練習(xí):用stat獲取文件信息
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{struct stat st;char filename[]="./01ls.c";int ret= stat(filename,&st); if(-1 == ret){fprintf(stderr,"stat error\n");return 1;}printf("ino:%lu mode:%d link:%lu uid:%u gid:%u size:%lu time:%lu %s\n",st.st_ino,st.st_mode,st.st_nlink,st.st_uid,st.st_gid,st.st_size,st.st_mtime,filename);return 0;
}
st_mode
字段是stat
結(jié)構(gòu)體的一部分,該結(jié)構(gòu)體通過stat()
,?fstat()
, 或?lstat()
函數(shù)獲取文件或目錄的狀態(tài)信息。我們可以通過一系列的宏(定義在<sys/stat.h>
或<sys/types.h>
頭文件中)來訪問和操作st_mode
字段中的不同部分。
st_mode有32bit,最后9位表示權(quán)限,以下表示權(quán)限:
S_IRWXU 00700 owner has read, write, and execute permissionS_IRUSR 00400 owner has read permissionS_IWUSR 00200 owner has write permissionS_IXUSR 00100 owner has execute permissionS_IRWXG 00070 group has read, write, and execute permissionS_IRGRP 00040 group has read permissionS_IWGRP 00020 group has write permissionS_IXGRP 00010 group has execute permissionS_IRWXO 00007 others (not in group) have read, write, andexecute permissionS_IROTH 00004 others have read permissionS_IWOTH 00002 others have write permissionS_IXOTH 00001 others have execute permission
?st_modes的使用:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h> // 用于可能的時間格式化,但這里未使用 int main(int argc, char *argv[])
{ struct stat st; char filename[] = "./01ls.c"; int ret = stat(filename, &st); if (-1 == ret) { fprintf(stderr, "stat error\n"); return 1; } // 輸出文件類型 if (S_ISREG(st.st_mode)) //如果 st_mode 的文件類型位與 S_ISREG 宏定義的掩碼相匹配,則 S_ISREG(st.st_mode) 將返回非零值(通常為真),表示 該文件是一個普通文件。{ fputc('-', stdout); } else if (S_ISDIR(st.st_mode)) { fputc('d', stdout); } else { fputc('o', stdout); // 其他類型 } // 輸出文件權(quán)限 printf("%c%c%c", (st.st_mode & S_IRUSR) ? 'r' : '-', (st.st_mode & S_IWUSR) ? 'w' : '-', (st.st_mode & S_IXUSR) ? 'x' : '-' ); // 組權(quán)限 printf("%c%c%c", (st.st_mode & S_IRGRP) ? 'r' : '-', (st.st_mode & S_IWGRP) ? 'w' : '-', (st.st_mode & S_IXGRP) ? 'x' : '-' ); // 其他用戶權(quán)限 printf("%c%c%c", (st.st_mode & S_IROTH) ? 'r' : '-', (st.st_mode & S_IWOTH) ? 'w' : '-', (st.st_mode & S_IXOTH) ? 'x' : '-' ); // 輸出硬鏈接數(shù)、用戶ID、組ID、文件大小、最后修改時間(秒數(shù))和文件名 printf(" %lu %u %u %lu %lu %s\n", st.st_nlink, st.st_uid, st.st_gid, st.st_size, (unsigned long)st.st_mtime, filename); return 0;
}
三、獲取時間
1.獲取秒數(shù)?? ?
2.轉(zhuǎn)換為需要個格式?? ?
1.time
time_t time(time_t *t);
功能:獲得1970年到現(xiàn)在的秒數(shù)
參數(shù):t:存放秒數(shù)的空間首地址
返回值:
?? ?成功返回1970年到現(xiàn)在的秒數(shù)
?? ?失敗返回-1
使用:先定義time_t tm;
方式1:time(&tm);方式2:tm = time(NULL);
2.ctime
char *ctime(const time_t *timep);//date
功能:將時間秒數(shù)轉(zhuǎn)化成字符串
參數(shù):timep:保存時間空間的地址
返回值:
?? ?成功返回獲得時間字符串的首地址
?? ?失敗返回NULL
3、localtime
struct tm *localtime(const time_t *timep);
功能:將一個秒數(shù)轉(zhuǎn)化成日歷時間
參數(shù):timep:保存秒數(shù)空間的地址
返回值:
?? ?成功返回保存日歷時間結(jié)構(gòu)體的指針
?? ?失敗返回NULL
struct tm?
?{
int tm_sec; ? ? ? ? /* seconds */
int tm_min; ? ? ? ? /* minutes */
int tm_hour; ? ? ? ?/* hours */
int tm_mday; ? ? ? ?/* day of the month */
int tm_mon; ? ? ? ? /* month */
int tm_year; ? ? ? ?/* year */
int tm_wday; ? ? ? ?/* day of the week */
int tm_yday; ? ? ? ?/* day in the year */
int tm_isdst; ? ? ? /* daylight saving time */
};
練習(xí):先用stat獲取文件的秒數(shù),再用localtime轉(zhuǎn)換
#include<time.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
int main(int argc, const char *argv[])
{struct stat s;stat("./2.txt",&s);time_t tm;tm=s.st_mtime;//time(&tm);//printf("%s\n",ctime(&tm));struct tm *t=localtime(&tm);printf("%d-%d-%d %d:%d:%d\n",t->tm_year+1900 ,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);return 0;
}