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人 ...
随机推荐
- uva-110-没有for循环的排序
题意:看输出就懂了,暴力枚举题,字符串最大长度是8,所有长度等于8的长度是8!=1x2x3x4x5x6x7x8=40320,数据量比较小的.只是枚举的方向比较怪异,如下,长度等于3的串 a ab,ba ...
- django-admin:command not found的解决办法
django-admin:command not found的解决办法 找到django-admin的路径 绝对路径 然后用命令行运行 python3 /usr/local/python3/lib/ ...
- CDN理解<转>
CDN则是更高级的手段.CDN到底如何工作的呢,让我们来大概了解一下! CDN的基础百科资料也很多了,我也稍等提一下.CDN,Content Distribute Network,即:内容分发网络. ...
- gorm中自己写sql的方法实现
type Result struct { Total int } var result Result //当天修改作业的总时间:分钟 dao.DB(dao.HomeworkTable).Raw(&qu ...
- 04-SSH综合案例:环境搭建之jar包引入
刚才已经把表关系的分析已经分析完了,现在呢就先不去创建这个表,写到哪儿的时候再去创建这个表. 1.4 SSH环境搭建: 1.4.1 第一步:创建一个web项目. 1.4.2 第二步:导入相应jar包. ...
- rsync同步常用命令[转载]
转载:http://blog.csdn.net/niushuai666/article/details/16880061 如果你是一位运维工程师,你很可能会面对几十台.几百台甚至上千台服务器,除了批量 ...
- dedecms分页
mshd_orderlist.php $page = isset($_REQUEST[; $count = $mshd_miaosha_member_obj -> getMemberList(t ...
- 不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN 代码与网络的 Graph
GAN 这个领域发展太快,日新月异,各种 GAN 层出不穷,前几天看到一篇关于 Wasserstein GAN 的文章,讲的很好,在此把它分享出来一起学习:https://zhuanlan.zhihu ...
- 使用cmd命令登录mysql数据库时报2013-Lost connection to MYSQL server at 'waiting for initial communication packet',system error:0
[错误内容]:SQL Error (2013): Lost connection to MySQL server at 'waiting for initial communication packe ...
- 【转】Defunct进程 僵尸进程
在测试基于 DirectFB+Gstreamer 的视频联播系统的一个 Demo 的时候,其中大量使用 system 调用的语句,例如在 menu 代码中的 system("./play&q ...