LINUX输入输出与文件——续

1 目录操作

改变目录或文件的访问权限

#include <sys/stat.h>

int chmod(const char *path, mode_t mode); //mode形如0777

path参数指定的文件被修改为具有mode参数给出的访问权限。

当修改权限成功返回0,修改失败返回-1。

(man 2 chmod)

获取当前目录

#include <unistd.h>
 
char *getcwd(char *buf, size_t size); //获取当前目录,相当于pwd命令

将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小. 在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则返回NULL,errno的值则为ERANGE。

倘若参数buf为NULL,getcwd()会根据参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会根据工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完此字符串后自动利用free()来释放此空间。所以常用的形式:getcwd(NULL, 0);

获取成功,返回指向当前工作目录的指针,一般值与buf相等。

(man 3 getcwd)

改变当前目录

#include <unistd.h>

int chdir(const char *path); //修改当前目录,即切换目录,相当于cd命令

用来将当前的工作目录改变成以参数path所指的目录。

修改成功返回0,事变返回-1。

创建和删除目录

#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int mkdir(const char *pathname, mode_t mode);    //创建目录,mode是目录权限
int rmdir(const char *pathname);                 //删除目录

创建或者删除成功返回0,失败返回-1。

(man 2 mkdir; man 2 rmdir)

获取目录信息

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);        //打开一个目录 
struct dirent *readdir(DIR *dir);      //读取目录的一项信息,并返回该项信息的结构体指针
int closedir(DIR *dir);                //关闭目录文件

opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和文件操作函数open()类似,接下来对目录的读取和搜索都要使用此返回值。函数失败则返回NULL。

readdir()函数用来读取目录的信息,并返回一个结构体指针,该指针保存了目录的相关信息。有错误发生或者读取到目录文件尾则返回NULL;dirent结构体如下:

On Linux, the dirent structure is defined as follows:

struct dirent {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* offset to the next dirent */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file; not supported by all file system types */
    char           d_name[256]; /* filename */
};

通常我们只关心dirent 结构体中的d_name信息。

kris_示例代码_1

/*************************************************************************
  > File Name: my_opendir.c
  > Author: KrisChou
  > Mail:[email protected] 
  > Created Time: Tue 19 Aug 2014 10:19:06 AM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>

int main(int argc, char *argv[])
{
    DIR* pdir;
    struct dirent *pent;
    pdir = opendir(argv[1]);
    if(pdir == NULL)
    {
        perror("opendir");
        exit(1);
    }
    while((pent = readdir(pdir)) != NULL)
    {
        printf("%u %u %u %x %s \n",pent->d_ino,pent->d_off,pent->d_reclen,pent->d_type,pent->d_name);
    }
    closedir(pdir);
    return 0;
}

以上代码读取通过命令行输入的目录下的所有文件的信息(dirent 中所包含的信息)

LINUX输入输出与文件——续,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。