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人 ...
随机推荐
- 利用 Babel 玩转你的代码
我在团队帮助开发 Node 工具时,遇到了需要对多份相似的代码进行一定的处理,但又不能改变原本仓库的代码,这个非常像我们的编译工具做的事情.在一开始的时候,参考了类似 FIS 的功能,简单参照使用代码 ...
- linux中用date命令获取昨天、明天或多天前后的日期
转自:http://www.linuxde.net/2011/10/1033.html 在实际操作中,一些脚本中会调用明天,或者昨天,或更多天前的日期,本文将叙述讲述用date命令实现时间的显示.在L ...
- c# 后台调用接口接收传过来的json
public string GetRequestTest(string url) { HttpWebRequest httpWebRequest = (HttpWebRequest)WebReques ...
- Thymeleaf 标准表达式语法
变量表达式${ } 在控制器中往页面传递几个变量: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Controller public class IndexController ...
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
实现EXCEL导入功能:web网站,excel导入用OLEDB同样会报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 报错信息: Exception caught. ...
- PHP 文件处理(综合)
1.获取远程文件大小:php获得远程文件大小的函数php获得远程文件大小的函数文件的大小函数为:filesize()文件是否存在的函数为:file_exits();但是这两个函数只针对本地那么:远程文 ...
- PBYTE
typedef BYTE near *PBYTE;
- 简述json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,他的数据结构与Python中的字典一样,键值对来表示数据间的关系,可以包含列表. 在编写 ...
- Javascript 知识遗漏点梳理。
先说一下我之前学习Javascript的学习经历,然后就是最近几天学到以前没有注意的知识遗漏点. 1.之前的学习经历和方法: 最开始是看了Javascript DOM编程与艺术这本书,把慕课网上的&l ...
- 如何学习C++? C++ Primer第三版中文版
C++只是一门工具,要在实际项目中才能感受到它的伟大.是慢慢积累的(任何知识都是,冰冻三尺非一日之寒),它的思想是慢慢领悟的. 知道它的语法不代表你会用,你会用不代表你就会建造起高水平的作品,这是一个 ...