Linux程序设计:目录维护
一、相关系统调用
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程序设计:目录维护的更多相关文章
- Linux程序设计(一)入门
1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...
- Linux标准目录
本文参考鸟哥的linux私房菜 /bin 获得最小的系统可操作性所需要的命令 /boot 内核和加载内核所需要的文件 /dev 终端.磁盘.调制解调器等的设备项 /etc 关键的启动文件和配置文件 / ...
- Linux的目录结构--一切从根开始
Linux目录结构的特点 # 举例-linux下面使用光盘 ###.把光盘放入到光驱中 ###.linux中使用光盘 /dev/cdrom [root@oldboyedu- ~]# ll /dev/c ...
- Linux系统管理和维护常用命令
Linux系统管理和维护常用命令 ls 命令 功能说明 ls 命令显示指定工作目录下的内容,列出工作目录所包含的文件及子目录. 语法结构: ls [选项] [路径或文件] ls 选项及说明 -a 显示 ...
- 2)Linux程序设计入门--进程介绍
)Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...
- 3)Linux程序设计入门--文件操作
)Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...
- 8)Linux程序设计入门--线程操作
)Linux程序设计入门--线程操作 前言:Linux下线程的创建 介绍在Linux下线程的创建和基本的使用. Linux下的线程是一个非常复杂的问题,由 于我对线程的学习不时很好,我在这里只是简单的 ...
- 7)Linux程序设计入门--网络编程
)Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...
- Linux 文件/目录操作详解
目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...
- [转帖]linux /proc目录下的文件为何无法用vi编辑保存
linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...
随机推荐
- 如何用git命令行上传本地代码到github
注意:安装的前提条件是配置好Git的相关环境或者安装好git.exe,此处不再重点提及 上传的步骤: 本文采用git 命令界面进行操作,先执行以下两个命令,配置用户名和email[设置用戶名和e-ma ...
- Eclipse 插件集合
以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequenc ...
- Using DirectShow------------------msdn
Using DirectShow This section contains the following topics: Simulating Graph Building with GraphE ...
- Eclipse Class Decompiler——Java反编译插件(转)
Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行Debug调试. ...
- soapUI参数中文乱码问题解决方法&soap UI工具进行web接口测试
soapUI参数中文乱码问题解决方法 可能方案1: 字体不支持中文,将字体修改即可: file-preferences-editor settings-select font 修改字体,改成能显示中文 ...
- 关于网页头图标ico的问题
今天同事问了我一个比较奇怪的问题,对于我来说,可能和编码没什么关系,但是确实是头一次注意到,所以把问题记录了下来,方便以后积累经验. 问题就是: 在本地的网页中设置了头图标 <link rel= ...
- Castle ActiveRecord学习(七)使用日志
暂无 参考:http://terrylee.cnblogs.com/archive/2006/04/14/374829.html
- 前端基础之:JQuery(可编辑版)
前端基础之jquery 一 jQuery是什么? [1] jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. [2] ...
- smarty if
<{if data}> <input type="submit" value="修改" /> <{else}> <in ...
- Display PDF in browser | Acrobat, Reader XI
点这个链接查看详细的解决办法 http://helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi.html When you cli ...