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人 ...
随机推荐
- Richview 首页 奇偶页 不同页眉页脚
首页 奇偶页 不同页眉页脚 ScaleRichView v6.0 Different headers and footers for the first page, for odd and even ...
- spring jpa sqls
package com.example.repository; import java.util.List; import org.springframework.data.jpa.repositor ...
- java.util.ConcurrentModificationException异常分析
Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下 ...
- S 导入值列表浏览器、值列表
先导入值列表浏览器,再导入值列表 一.导出模板 上面为导出模板 二.导入值列表浏览器 下面开始导入EXCEL数据 List Of Values Parent(1).xls List Of Values ...
- Python小程序之「读取站点地图 自动为Gitalk创建Issues」
首发于个人博客 想获得更好的阅读体验,烦请移步⬆️ 前言 前些天给博客加了评论功能,试了Disqus.Valine等一干评论系统,最后还是选择了在大陆相对友好而且符合技术博客风格的Gitalk.但是由 ...
- 解决Springboot集成ActivitiModel提示输入用户名密码的问题
一.原因分析 先要知道两点 - SpringBoot会根据引入的Jar包而自动配置相应的功能. - ActivitiModeler中引用了Spring Security的Jar.(是一个安全或者说权限 ...
- Windows pip安装失败:no module named pkg_resources
通常是Setuptools安装出错,下载以下ez_setup.py文件后,先执行:ez_setup.py -U setuptools 重新安装setuptools 通过此ez_setup.py pip ...
- loadrunner12: Error -27492: "HttpSendRequest" failed, Windows error code=8
这个问题我在网上看到有这样的解释:1.timeout时间超时设置问题2.Run-Time Settings -> Preferences -> Advanced. 确定此选项未被选中:&q ...
- iOS界面设计,12个优秀案例激发你的灵感
总所周知,iOS和Android是当今两大移动平台,前者采用Human Interface Design,后者采用Material Design.作为设计师,尤其是App设计师,总是会在这两者进行设计 ...
- MySql 8小时解决方案:proxool连接池
最近做的项目用的mysql数据库,前天挂在服务器上,昨天早晨上班一来,同事就说API数据接口访问不了了,我马上mstsc登陆服务器看,报错了.马上重启tomcat,结果还能正常运行,当时没管,今天过来 ...