一、相关系统调用

1.1 chmod

改变访问权限。

#include <sys/stat.h>
int chmod(const char *path, mode_t mode)

1.2 chown

改变文件的owner。(没想到有什么用= =)

#include <sys/types.h>
#include <unistd.h>
int chown(const char *pathname, uid_t owner, gid_t group);

其中,owner可以通过getuid(),group可以通过getgid()。

1.3 unlink、link、symlink

  • unlink用于删除文件,成功0,失败-1。(前提是必须拥有文件所属目录的写r和执行权限x)
  • link
  • symlink

(待补充)

1.4 mkdir、rmdir

建立和删除目录。

#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
#include <unistd.h>
int rmdir(const char *pathname);

1.5 chdir、getcwd

chdir切换程序的工作目录。

getcwd:get current working dir

#include <unistd.h>
int chdir(const char *path);
char *getcwd(char *buf, size_t size);

1.6 opendir、readdir

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);

opendir打开一个目录,返回一个DIR指针(失败NULL),用于读取目录相关数据项。

readdir()返回参数dir 目录流的下个目录进入点。结构dirent 定义如下:

struct dirent
{
long d_ino; /* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen; /* length of this d_name 文件名长 */
unsigned char d_type; /* the type of d_name 文件类型 */
char d_name[NAME_MAX + ]; /* file name (null-terminated) 文件名,最长256字符 */
}

1.7 telldir、seekdir、closedir

#include <dirent.h>
long telldir(DIR *dirp); #include <dirent.h>
void seekdir(DIR *dirp, long loc); #include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
  • telldir:返回目录流的当前位置。
  • seekdir:设置当前目录流的目录项指针,loc是设置的位置,可通过telldir获得。
  • closedir:关闭目录流。

二、tree命令的实现

depth:控制缩进,每进一层目录,缩进加4空格。

void test2()
{
char buffer[BUFSIZ];
getcwd(buffer, BUFSIZ); puts(buffer);
tree("/home/sin/desktop/workspace/OSLab/MiniShell", ); memset(buffer, , sizeof(buffer));
getcwd(buffer, BUFSIZ);
puts(buffer); }
void tree(char *dir, int depth)
{
char cwd_buff[];
getcwd(cwd_buff, sizeof(cwd_buff)); DIR *dp;
struct dirent *entry;
struct stat statbuf;
if ((dp = opendir(dir)) == NULL)
{
fprintf(stderr, "open failed\n");
return;
}
chdir(dir);
while ((entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
if (S_ISDIR(statbuf.st_mode))
{
if (strcmp(".", entry->d_name) == || strcmp("..", entry->d_name) == || entry->d_name[] == '.')
{
continue;
}
printf("%*s%s/\n", depth, "", entry->d_name);
tree(entry->d_name, depth + );
}
else
{
printf("%*s%s\n", depth, "", entry->d_name);
}
}
chdir(cwd_buff); //switch to original dir
closedir(dp);
}

运行结果:

sin@ubuntu:~/desktop/workspace/OSLab/MiniShell$ make test
gcc test.c -o a.out
./a.out
/home/sin/desktop/workspace/OSLab/MiniShell
src/
string/
mystring.c
process/
buildin_cmd.c
external_cmd.c
shell/
shellmain.c
ui.c
Makefile
test.c
README.md
.gitignore
a.out
include/
macro.h
mystring.h
process.h
types.h
shell.h
build/
bin/
MiniShell
obj/
string/
mystring.o
process/
external_cmd.o
buildin_cmd.o
shell/
ui.o
shellmain.o
/home/sin/desktop/workspace/OSLab/MiniShell

Linux程序设计:目录维护的更多相关文章

  1. Linux程序设计(一)入门

    1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...

  2. Linux标准目录

    本文参考鸟哥的linux私房菜 /bin 获得最小的系统可操作性所需要的命令 /boot 内核和加载内核所需要的文件 /dev 终端.磁盘.调制解调器等的设备项 /etc 关键的启动文件和配置文件 / ...

  3. Linux的目录结构--一切从根开始

    Linux目录结构的特点 # 举例-linux下面使用光盘 ###.把光盘放入到光驱中 ###.linux中使用光盘 /dev/cdrom [root@oldboyedu- ~]# ll /dev/c ...

  4. Linux系统管理和维护常用命令

    Linux系统管理和维护常用命令 ls 命令 功能说明 ls 命令显示指定工作目录下的内容,列出工作目录所包含的文件及子目录. 语法结构: ls [选项] [路径或文件] ls 选项及说明 -a 显示 ...

  5. 2)Linux程序设计入门--进程介绍

    )Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...

  6. 3)Linux程序设计入门--文件操作

    )Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...

  7. 8)Linux程序设计入门--线程操作

    )Linux程序设计入门--线程操作 前言:Linux下线程的创建 介绍在Linux下线程的创建和基本的使用. Linux下的线程是一个非常复杂的问题,由 于我对线程的学习不时很好,我在这里只是简单的 ...

  8. 7)Linux程序设计入门--网络编程

    )Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...

  9. Linux 文件/目录操作详解

    目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...

  10. [转帖]linux /proc目录下的文件为何无法用vi编辑保存

    linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...

随机推荐

  1. 如何用git命令行上传本地代码到github

    注意:安装的前提条件是配置好Git的相关环境或者安装好git.exe,此处不再重点提及 上传的步骤: 本文采用git 命令界面进行操作,先执行以下两个命令,配置用户名和email[设置用戶名和e-ma ...

  2. Eclipse 插件集合

    以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1)    AmaterasUML        介绍:Eclipse的UML插件,支持UML活动图,class图,sequenc ...

  3. Using DirectShow------------------msdn

    Using DirectShow   This section contains the following topics: Simulating Graph Building with GraphE ...

  4. Eclipse Class Decompiler——Java反编译插件(转)

    Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行Debug调试. ...

  5. soapUI参数中文乱码问题解决方法&soap UI工具进行web接口测试

    soapUI参数中文乱码问题解决方法 可能方案1: 字体不支持中文,将字体修改即可: file-preferences-editor settings-select font 修改字体,改成能显示中文 ...

  6. 关于网页头图标ico的问题

    今天同事问了我一个比较奇怪的问题,对于我来说,可能和编码没什么关系,但是确实是头一次注意到,所以把问题记录了下来,方便以后积累经验. 问题就是: 在本地的网页中设置了头图标 <link rel= ...

  7. Castle ActiveRecord学习(七)使用日志

    暂无 参考:http://terrylee.cnblogs.com/archive/2006/04/14/374829.html

  8. 前端基础之:JQuery(可编辑版)

     前端基础之jquery   一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. [2]   ...

  9. smarty if

    <{if data}> <input type="submit" value="修改" /> <{else}> <in ...

  10. Display PDF in browser | Acrobat, Reader XI

    点这个链接查看详细的解决办法 http://helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi.html When you cli ...