Linux目录操作相关函数

一、整体大纲

二、相关函数

1. getcwd

  • 函数作用:获取当前目录
  • 头文件
#include <unistd.h>
  • 函数原型
char *getcwd(char *buf, size_t size);
  • 参数说明:

buf传出参数,路径
          size缓冲区大小

  • 返回值

成功:返回路径的指针
          失败:返回NULL

2. chdir

  • 函数作用:改变工作路径
  • 头文件

#include <unistd.h>

  • 函数原型
int chdir(const char *path);
  • 函数参数:

path对应的目标工作路径

  • 返回值

成功:返回0
          失败:返回-1,设置errno

注意:改变工作路径-注意属于进程独有。

示例:

 1 #include<stdio.h>
 2 #include<unistd.h>
 3 #include<sys/types.h>
 4 #include<sys/stat.h>
 5 #include<fcntl.h>
 6
 7 int main(int argc, char *argv[])
 8 {
 9     if (argc != 2)
10     {
11         printf("./a.out filename\n");
12         return -1;
13     }
14
15     //先切换工作目录
16     chdir(argv[1]);
17
18     int fd = open("temp.txt", O_WRONLY|O_CREAT, 0666);
19     write(fd, "daociyiyou", 10);
20     close(fd);
21
22     //获取当前工作目录
23     char buf[256] = {0};
24     getcwd(buf, sizeof(buf));
25     printf("buf is %s\n", buf);
26
27     return 0;
28 }

chdir示例

3. mkdir

  • 函数作用:创建目录
  • 头文件
#include <sys/stat.h>
#include <sys/types.h>
  • 函数原型
int mkdir(const char *pathname, mode_t mode);
  • 参数说明:

pathname创建的目录路径
          mode目录权限 (mode & ~umask & 01777),注意权限,如果目录没有可执行权限,不可进入

  • 返回值

成功:返回0
          失败:返回-1,设置errno
4. rmdir

  • 函数作用:只能删除空文件夹

5. opendir

  • 函数作用:打开目录
  • 头文件
#include <sys/types.h>
#include <dirent.h>
  • 函数原型
DIR *opendir(const char *name);
  • 参数说明:

pathname打开的目录

  • 返回值

成功:返回指向该目录流的指针
          失败:返回-1,设置errno

6. readdir

  • 函数作用:读目录
  • 头文件
#include <dirent.h>
  • 函数原型
struct dirent *readdir(DIR *dirp);
  • 参数说明:

dirp传入参数,opendir返回的指针

  • 返回值

成功:读到目录项的内容
          失败:NULL代表读到末尾或者有错误

struct dirent {
    ino_t d_ino; /* inode number */
    off_t d_off; /* not an offset; see NOTES */
    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 */
};

7. closedir

  • 函数作用:关闭目录
  • 头文件
#include <sys/types.h>
#include <dirent.h>
  • 函数原型
int closedir(DIR *dirp);
  • 函数参数:

dirp传入参数,opendir返回的指针

  • 返回值

成功:返回0
          失败:返回-1,设置errno

需求:统计一下指定目录下的文件个数?

 1 #include <stdio.h>
 2 #include<unistd.h>
 3 #include<dirent.h>
 4 #include<string.h>
 5 #include <sys/types.h>
 6
 7 int count = 0;
 8
 9 int DirCount(char *dirname)
10 {
11     printf("================dirname:%s================\n", dirname);
12     //打开目录
13     DIR *dirp = opendir(dirname);
14     if (NULL == dirp)
15     {
16         perror("opendir err:");
17         return -1;
18     }
19     //循环读目录,如果是普通文件,count++,如果是目录,继续调用DirCount
20     struct dirent *dentp = NULL;
21     while ((dentp = readdir(dirp)) != NULL)
22     {
23         if (dentp->d_type == DT_DIR) //如果是目录
24         {
25             if (strcmp(dentp->d_name, ".") == 0 || strcmp(dentp->d_name, "..") == 0)
26             {
27                 continue;
28             }
29             printf("================dirname:%s, dtype:%d================\n", dentp->d_name, dentp->d_type);
30             //注意进程的工作路径,不能直接打开子目录
31             //使用dirname拼接下一级子目录
32             char newdirname[256] = {0};
33             sprintf(newdirname, "%s/%s", dirname, dentp->d_name);
34             DirCount(newdirname);
35         }
36         if (dentp->d_type == DT_REG)
37         {
38             count++;
39             printf("-------------filename:%s, dtype:%d------------\n", dentp->d_name, dentp->d_type);
40         }
41     }
42     //关闭目录
43     closedir(dirp);
44     return 0;
45 }
46
47 int main(int argc, char *argv[])
48 {
49     if (argc != 2)
50     {
51         printf("./a.out dirname\n");
52         return -1;
53     }
54     DirCount(argv[1]);
55     printf("total file count %d\n", count);
56
57     return 0;
58 }

统计指定目录下文件个数

8. dup2

  • 函数作用:文件描述符重定向
  • 头文件
#include <unistd.h>
  • 函数原型
int dup2(int oldfd, int newfd);
  • 参数说明:

关闭newfd对应的文件描述符,将newfd重新指向为old对应的文件

  • 返回值

成功:返回0
           失败:返回-1,设置errno
9. dup

  • 函数作用:复制文件描述符
  • 头文件
#include <unistd.h>
  • 函数原型
int dup(int oldfd);
  • 参数说明:

新返回一个文件描述符指向oldfd对应的文件

  • 返回值

成功:返回0
          失败:返回-1,设置errno

需求:在代码中执行2次printf("hello world\n");一次输出到hello文件,后一次输出到屏幕上?

 1 #include <stdio.h>
 2 #include<unistd.h>
 3 #include<sys/types.h>
 4 #include<sys/stat.h>
 5 #include<fcntl.h>
 6
 7 int main(int argc, char *argv[])
 8 {
 9     if (argc != 2)
10     {
11         printf("./a.out filename\n");
12         return -1;
13     }
14     //先备份现场
15     int outfd = dup(1);
16     //先做重定向
17     int fd = open(argv[1], O_WRONLY|O_CREAT, 0666);
18     dup2(fd, 1);
19     printf("Hello world\n");
20     //必须刷新
21     fflush(stdout);
22
23     //需要回复1,重新对应标准输出
24     dup2(outfd, 1);
25     printf("Hello world\n");
26
27     close(fd);
28
29     return 0;
30 }

需求实现

10. errno

  • 函数作用:输出函数,根据errnum得到相应的错误信息
  • 头文件
#include <string.h>
  • 函数原型:
char *strerror(int errnum);

11. fcntl

  • 改变已经打开的文件的属性
  • 打开文件的时候: 只读
  • 修改文件的: 添加追加 O_APPEND

三、补充

1. 索引节点inode

保存的其实是实际的数据的一些信息,这些信息称为“元数据”(也就是对文件属性的描述)。例如:文件大小,设备标识符,用户标识符,用户组标识符,文件模式,扩展属性,文件读取或修改的时间戳,链接数量,指向存储该内容的磁盘区块的指针,文件分类等等。( 注意数据分成:元数据+数据本身 )

注意inode怎样生成的:每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定(现代OS可以动态变化),一般每2KB就设置一个inode。一般文件系统中很少有文件小于2KB的,所以预定按照2KB分,一般inode是用不完的。所以inode在文件系统安装的时候会有一个默认数量,后期会根据实际的需要发生变化。

注意inode号:inode号是唯一的,表示不同的文件。其实在Linux内部的时候,访问文件都是通过inode号来进行的,所谓文件名仅仅是给用户容易使用的。当我们打开一个文件的时候,首先,系统找到这个文件名对应的inode号;然后,通过inode号,得到inode信息,最后,由inode找到文件数据所在的block,现在可以处理文件数据了。

2. inode和文件的关系

当创建一个文件的时候,就给文件分配了一个inode。一个inode只对应一个实际文件,一个文件也会只有一个inode。inodes最大数量就是文件的最大数量。

原文地址:https://www.cnblogs.com/xuejiale/p/10790114.html

时间: 2024-08-27 22:13:23

Linux目录操作相关函数的相关文章

Linux文件操作相关函数

一.整体大纲 st_mode整体介绍: st_mode详细介绍: 二. Linux文件操作相关函数 1. stat 作用:获得文件信息,也可以获取文件大小. 头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 函数原型 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); i

linux目录操作

cd:改变当前的工作目录. pwd:显示当前的工作目录名,比如位于文件系统中的哪里. basename:显示文件路径中末端部分. dirname:显示文件路径中末端之外部分. mkdir:创建目录. rmdir:删除空目录. rm-r:删除非空目录及其内容. cd命令 cd [directory] cd(change directory)命令用于设置当前工作目录 : $ cd /usr/games 没有指定目录时,cd默认切换到你的个人目录: $ cd pwd命令 pwd命令用于显示当前工作目录

linux目录操作及递归遍历目录

目录相关函数介绍 //mkdir 函数创建目录 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); //rmdir 删除目录 #include <unistd.h> int rmdir(const char *pathname); //dopendir/fdopendir  //打开目录 DIR是一个结构体,是一个内部结构,用来存储读取目录的

Linux目录操作的常用系统函数说明

1. chdir修改当前进程的工作目录 (man 2 chdir 查看) int chdir(const char *path); //path路径 int fchdir(int fd); //fd文件描述符 返回值:成功返回0:失败返回-1 . 2. getcwd获取当前进程的工作目录 char *getcwd(char *buf, size_t size); //buf传出参数,size是buf的长度, char *getwd(char *buf); char *get_current_di

liunx学习(一):linux下目录操作大全

Linux C函数之文件及目录函数(全):http://blog.sina.com.cn/s/blog_695e489c01013ldd.html linux目录操作发:http://www.cnblogs.com/onlycxue/p/3154341.html linux中遍历文件夹下的所有文件 :http://www.jb51.net/article/37664.htm Linux下C获取文件夹下所有文件名:http://blog.csdn.net/sinat_30071459/articl

【Linux命令详解】2、文件和目录操作管理

2.文件和目录操作管理 本节主要学习在Linux下如何使用命令对文件和目录进行操作,这些命令pwd.cd.ls等. 2.1 pwd:显示工作目录路径 使用pwd命令可以显示当前用户所处的工作目录的绝对路径. 2.1.1命令语法: pwd[选项] 2.1.2参数选项: 选项 选项含义 -L 目录链接时,输出链接路径 -P 输出物理路径 2.1.3实例: 例1:显示用户当前工作目录路径. [[email protected] ~]# pwd /root //用户当前的工作路径是root 例2:显示用

Matlab命令——目录操作(windows&amp;Linux)

Matlab命令——目录操作(windows&Linux) 1. filesep用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/).有时此命令结合ispc命令使用,可以灵活的设置目录分割符. 2. fullfile用于将若干字符串连接成一个完整的路径,根据不同的操作系统自动填充目录分割符.例如:>> f=fullfile('D:','Matlab','example.txt')f=D:\Matlab\example.txt(在Windows中,“D:\”

【Linux C中文函数手册】之 目录操作函数

目录操作函数 1)closedir 关闭目录 相关函数: opendir表头文件: #include<sys/types.h> #include<dirent.h>定义函数: int closedir(DIR *dir);函数说明: closedir()关闭参数dir所指的目录流.返回值: 关闭成功则返回0,失败返回-1,错误原因存于errno 中.错误代码: EBADF 参数dir为无效的目录流 2)fchdir 改变当前的工作目录 相关函数: getcwd,chroot表头文件

菜鸟学Linux命令:cd rm mv cp pwd 目录操作

文件和目录操作是必须掌握的. pwd命令 pwd命令用于打印当前目录. cd命令 Linux最基本的操作. 命令格式cd [目录名] 切换当前目录至dirName 参数规则1.返回上一级目录cd ..2.返回系统根目录cd /3.进入当前用户主目录“当前用户主目录”和“系统根目录”是两个不同的概念.进入当前用户主目录有两个方法.直接使用 cd或者 cd ~4.跳转到指定目录跳转到指定目录,从根目录开始,目录名称前加 / cd /data/jdk7/当前目录内的子目录直接写名称即可cd Music