Unix文件与目录简介

本文主要简单介绍Unix文件与目录

文件系统

Unix文件系统是目录和文件的一种层次结构,所有东西的起点是称为根的目录,此目录的名称是一个字符"/"

文件名

创建新目录时会自动创建了两个文件名:.(点)和..(点点),点指向当前目录,点点指向父目录

路径名

由斜线分隔的一个或多个文件名组成的序列构成路径名,以斜线开头的路径名成为绝对路径名,否则称为相对路径名

举个例子:

实现列举一个目录中所有的文件的名字(ls命令的简要实现)

#include<dirent.h>
#include"apue.h"
#include<errno.h>

int main(int argc, char *argv[])
{
	DIR *dp;
	struct dirent *dirp;
	if(argc != 2)
	    err_quit("usage: ls directory_name");
	if((dp = opendir(argv[1])) == NULL)
	    err_sys("can't open %s", argv[1]);
	while((dirp = readdir(dp)) != NULL)
	    printf("%s\n", dirp->d_name);
	closedir(dp);
	exit(0);
}

编译运行:

wu@ubuntu:~/opt/Cproject/apue/cp1$ gcc error.c myls.c -o a.out
wu@ubuntu:~/opt/Cproject/apue/cp1$ ./a.out /dev

其中apue.h主要是一个宏定义、常量定义等,代码如下:

/*
 * Our own header, to be included before all standard system headers.
 */
#ifndef	_APUE_H
#define	_APUE_H

#define _POSIX_C_SOURCE 200809L

#if defined(SOLARIS)		/* Solaris 10 */
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 700
#endif

#include <sys/types.h>		/* some systems still require this */
#include <sys/stat.h>
#include <sys/termios.h>	/* for winsize */
#if defined(MACOS) || !defined(TIOCGWINSZ)
#include <sys/ioctl.h>
#endif

#include <stdio.h>		/* for convenience */
#include <stdlib.h>		/* for convenience */
#include <stddef.h>		/* for offsetof */
#include <string.h>		/* for convenience */
#include <unistd.h>		/* for convenience */
#include <signal.h>		/* for SIG_ERR */

#define	MAXLINE	4096			/* max line length */

/*
 * Default file access permissions for new files.
 */
#define	FILE_MODE	(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

/*
 * Default permissions for new directories.
 */
#define	DIR_MODE	(FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)

typedef	void	Sigfunc(int);	/* for signal handlers */

#define	min(a,b)	((a) < (b) ? (a) : (b))
#define	max(a,b)	((a) > (b) ? (a) : (b))

/*
 * Prototypes for our own functions.
 */
char	*path_alloc(size_t *);				/* {Prog pathalloc} */
long	 open_max(void);					/* {Prog openmax} */

int		 set_cloexec(int);					/* {Prog setfd} */
void	 clr_fl(int, int);
void	 set_fl(int, int);					/* {Prog setfl} */

void	 pr_exit(int);						/* {Prog prexit} */

void	 pr_mask(const char *);				/* {Prog prmask} */
Sigfunc	*signal_intr(int, Sigfunc *);		/* {Prog signal_intr_function} */

void	 daemonize(const char *);			/* {Prog daemoninit} */

void	 sleep_us(unsigned int);			/* {Ex sleepus} */
ssize_t	 readn(int, void *, size_t);		/* {Prog readn_writen} */
ssize_t	 writen(int, const void *, size_t);	/* {Prog readn_writen} */

int		 fd_pipe(int *);					/* {Prog sock_fdpipe} */
int		 recv_fd(int, ssize_t (*func)(int,
		         const void *, size_t));	/* {Prog recvfd_sockets} */
int		 send_fd(int, int);					/* {Prog sendfd_sockets} */
int		 send_err(int, int,
		          const char *);			/* {Prog senderr} */
int		 serv_listen(const char *);			/* {Prog servlisten_sockets} */
int		 serv_accept(int, uid_t *);			/* {Prog servaccept_sockets} */
int		 cli_conn(const char *);			/* {Prog cliconn_sockets} */
int		 buf_args(char *, int (*func)(int,
		          char **));				/* {Prog bufargs} */

int		 tty_cbreak(int);					/* {Prog raw} */
int		 tty_raw(int);						/* {Prog raw} */
int		 tty_reset(int);					/* {Prog raw} */
void	 tty_atexit(void);					/* {Prog raw} */
struct termios	*tty_termios(void);			/* {Prog raw} */

int		 ptym_open(char *, int);			/* {Prog ptyopen} */
int		 ptys_open(char *);					/* {Prog ptyopen} */
#ifdef	TIOCGWINSZ
pid_t	 pty_fork(int *, char *, int, const struct termios *,
		          const struct winsize *);	/* {Prog ptyfork} */
#endif

int		lock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */

#define	read_lock(fd, offset, whence, len) \
			lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len))
#define	readw_lock(fd, offset, whence, len) \
			lock_reg((fd), F_SETLKW, F_RDLCK, (offset), (whence), (len))
#define	write_lock(fd, offset, whence, len) \
			lock_reg((fd), F_SETLK, F_WRLCK, (offset), (whence), (len))
#define	writew_lock(fd, offset, whence, len) \
			lock_reg((fd), F_SETLKW, F_WRLCK, (offset), (whence), (len))
#define	un_lock(fd, offset, whence, len) \
			lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len))

pid_t	lock_test(int, int, off_t, int, off_t);		/* {Prog locktest} */

#define	is_read_lockable(fd, offset, whence, len) \
			(lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0)
#define	is_write_lockable(fd, offset, whence, len) \
			(lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0)

void	err_msg(const char *, ...);			/* {App misc_source} */
void	err_dump(const char *, ...) __attribute__((noreturn));
void	err_quit(const char *, ...) __attribute__((noreturn));
void	err_cont(int, const char *, ...);
void	err_exit(int, const char *, ...) __attribute__((noreturn));
void	err_ret(const char *, ...);
void	err_sys(const char *, ...) __attribute__((noreturn));

void	log_msg(const char *, ...);			/* {App misc_source} */
void	log_open(const char *, int, int);
void	log_quit(const char *, ...) __attribute__((noreturn));
void	log_ret(const char *, ...);
void	log_sys(const char *, ...) __attribute__((noreturn));
void	log_exit(int, const char *, ...) __attribute__((noreturn));

void	TELL_WAIT(void);    /* parent/child from {Sec race_conditions} */
void	TELL_PARENT(pid_t);
void	TELL_CHILD(pid_t);
void	WAIT_PARENT(void);
void	WAIT_CHILD(void);
#endif	/* _APUE_H */

工作目录

每一个进程都有一个工作目录,所有的相对路径都从工作目录开始解释。

起始目录

登录时,工作目录设置为其实目录

时间: 2024-09-15 14:11:38

Unix文件与目录简介的相关文章

unix如何复制文件和文件夹目录

  演示系统及适用范围 演示系统:FreeBSD9.1 适用范围:unix及linux系统 cp复制命令用法 命令 执行结果说明 cp file1 file2 将现有的,名为file1的文件复制到名为file2的usr文件中. cp file1 /crchive 把file1复制到archive目录中,该目录是根目录下的一个子目录. cp file1 mystuff/newfile 将能file1复制到当前目录的mystuff目录中.如果newfile是子目录,file1将被复制到mystuff

《UNIX环境高级编程(第3版)》——1.4 文件和目录

1.4 文件和目录 1.文件系统 UNIX文件系统是目录和文件的一种层次结构,所有东西的起点是称为根(root)的目录,这个目录的名称是一个字符"/". 目录(directory)是一个包含目录项的文件.在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息.文件属性是指文件类型(是普通文件还是目录等).文件大小.文件所有者.文件权限(其他用户能否访问该文件)以及文件最后的修改时间等.stat和fstat函数返回包含所有文件属性的一个信息结构.第4章将详细说明文件

详细学习PHP中对文件和目录的操作方法

一:引论 在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何使用,关于对应的函数详细介绍,请查阅php手册,此处只总结重点和需要注意的地方. 二:目录操作 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: 以下

VC处理文件、目录及相应的目录字符串

介绍 文章简单介绍了两种处理文件及目录的方式,一种为boost::filesystem库,一种是用 Win32平台上Windows Shell中的Path Functions. 和文件系统的交互操作及对文件及目录字符串的处理,是编程活动中普遍碰到的问题.下 面介绍两种不同的方式,借助任意一种都可以大大的加速编程时花在这方面的时间和精力, 而且构建出的应用也更稳固.介绍的比较简单,在实际应用时建议大家根据具体需要查看相 应的帮助文档. boost库(www.boost.org)中的filesyst

Linux 命令(文件和目录管理 - zip/unzip)

简述 zip/unzip 是 Linux 中广泛使用的压缩/解压缩程序zip 命令用来将文件压缩为常用的 zip 格式扩展名为 .zipunzip 命令则用来解压缩 zip 文件. 简述 zip 命令介绍 命令选项 使用范例 unzip 命令介绍 命令选项 使用范例 zip 命令介绍 命令名称 zip 基本语法 zip [-aABcdDeEfFghjklLmoqrRSTuvVwXyz!@$] [--longoption ...] [-b path] [-n suffixes] [-t date]

Linux 命令(文件和目录管理 - gzip/gunzip)

简述 和 zip 命令类似,gzip 用于文件的压缩,gzip 压缩后的文件扩展名位 .gz,gzip 默认压缩后会删除原文件.gunzip 用于解压经过 gzip 压缩过的文件. 简述 gzip 命令介绍 命令选项 使用范例 gunzip 命令介绍 命令选项 使用范例 gzip 命令介绍 命令名称 gzip 基本语法 gzip [OPTION]- [FILE]- 功能描述 压缩文件.压缩后的文件扩展名位 .gz,默认压缩后会删除原文件. 命令选项 选项 说明 -a --ascii 使用 ASC

TortoiseSVN设置忽略文件和目录文件夹

TortoiseSVN设置忽略文件和目录文件夹  在多数项目中你总会有文件和目录不需要进行版本控制.这可能包括一些由编译器生成的文件,*.obj,*.lst,或许是一个用于存放可执行程序的输出文件夹.只要你提交修改,TortoiseSVN 就会在提交对话框的文件列表中显示出未版本控制文件.当然你可以关闭这个显示,不过你可能会忘记添加新的源文件.   最好的避免类似问题的方法是添加参考文件到该项目的忽略列表.这样他们就永远不会出现在提交对话框中,而真正的未版本控制文件则仍然列出. 方法一 在资源管

php基础入门篇-文件和目录操作

本章可以算是上一章的延续,介绍了除文件实际内容之外的附加信息,包括文件的大小.目录.访问权限等.文件系统中的某些函数只在服务器为特定的系统中时才有效,例如更改符号链接的函数symlink(),设定文件访问权限的函数chmod(),设定目录访问权限的函数umask()等等这些只在Linux系统中有效,在Windows系统中无效.PHP5以后提供的DirectoryIterator类也封装了很多实用的目录方面的操作  代码如下 复制代码 //------------- 采用DirectoryIter

PHP中文件读、写、删的操作(PHP中对文件和目录操作)_php实例

一:目录操作 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: 复制代码 代码如下: <?php $base_dir = "filelist/"; $fso = opendir($base_dir); echo $base_dir."<hr/>" ; while($flist=readdir($fso)){ echo $flist."<br/&