satan 通过 Google 阅读器发送给您的内容:
获取当前目录
1.getcwd
#include <unistd.h>
char * getcwd ( char *buf, size_t size);
成功调用getcwd()会以绝对路径名形式复制当前工作目录至由buf指向的长度size字节的缓冲区。并返回一个指向buf的指针。失败时,调用返回NULL,并设置errno。(EFAULT,EINVAL,ENOENT,ERANGE).
POSIX指出,如果buf是NULL,getcwd()的行为是未定义的。在这种情况下,Linux的c库将分配一个长度size字节的缓冲区,并在那存储当前工作目录。如果size为0,c库将分配足够大小的缓冲区存储当前工作目录。调用结束后,需要由应用程序负责使用free()来释放缓冲区。示例如下:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> void main() { char *cwd; cwd=getcwd(NULL,0); if(!cwd) { perror("getcwd"); exit(EXIT_FAILURE); } printf("cwd = %s\n",cwd); free(cwd); }
2.get_current_dir_name
linux的c库提供函数get_current_dir_name()来获得当前工作目录。他与getcwd(NULL,0)行为一致。
原型如下:
#define _GNU_SOURCE
#include <unistd.h>
char * get_current_dir_name(void);
成功返回分配的缓冲区首地址,失败返回NULL。需要用free()来释放缓冲区。
3.getwd
#define _XOPEN_SOURCE_EXTENDED
#include <unistd.h>
char * getwd(char *buf);
调用getwd会复制当前工作目录至长度至少PATH_MAX字节的buf。成功调用返回buf指针,失败返回NULL。
getwd()这个函数是为了向后兼容,因此不建议使用,推荐getcwd().
更改当前工作目录
linux为更改当前工作目录提供两个系统调用,一个接受目录路径名,而另一个接收指向已打开目录的文件描述符:
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
成功时两个调用均返回0.失败,返回-1.并设置errno。
创建目录
linux为创建新目录提供了一个标准的POSIX系统调用:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir (const char *path, mode_t mode);
成功调用mkdir会创建目录path,其权限位为mode(由当前umask修改),并返回0.调用失败返回-1.并设置errno。
在linux中,新建目录的权限位是(mode&umask&01777).
移除目录
标准的POSIX调用rmdir()将目录从文件系统层次上移除:
#Include <unistd.h>
int rmdir(const char *path);
调用成功,rmdir从文件系统移除path,并返回0.path指向的目录必须唯恐。调用失败时,rmdir()返回-1,并设置errno。
读取目录内容
开始读取目录内容前,你需要创建一个由DIR对象指向的目录流:
#Include <sys/types.h>
#include <dirent.h>
DIR * opendir(const char *name);
成功调用opendir会创建name所指向目录的目录流。目录流比指向打开目录的文件描述符保存的内容多了一些,主要增加的是一些元数据和保存目录内容的缓冲区。因此可以在给定目录流中获取该目录的文件描述符:
#define _BSD_SOURCE
#include <sys/types.h>
#Include <dirent.h>
int dirfd(DIR *dir);
成功调用dirfd返回目录流dir的文件描述符。错误时,调用返回-1.dirfd是BSD扩展,不是POSIX标准函数。
使用opendir创建一个目录流后,程序可以使用readdir来读取目录流。
#include <sys/types.h>
#include <dirent.h>
struct dirent * readdir(DIR *dir);
成功调用readdir会返回dir指向的下个目录项。结构dirent指向目录项。当整个目录读完,readdir会返回NULL,调用失败时也返回NULL,为区别错误和已读完所有文件,应用程序必须在每次调用readdir之前将errno设置为0.并在之后检查返回值和errno。
使用closedir关闭由opendir打开的目录流:
#include <sys/types.h>
#Include <dirent.h>
int closedir(DIR *dir);
成功调用closedir会关闭由dir指向的目录流,包括目录的文件描述符,并返回0,失败时,返回-1,并设置errno为EBADF。
用于读取目录内容的系统调用
上面讨论的读取目录内容的函数都是c库提供的标准POSIX函数。在这些函数内部,则使用系统调用readdir()和getdents().
#include <unistd.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
#include <errno.h>
int readdir(unsigned int fd, struct dirent *dirp, unsigned int count);
int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);
一般来说,不要使用这些系统调用,用户空间应用程序应使用C库的系统调用.opendir,readdir,closedir.
本文作者:averainy | 本文地址: 固定链接 | 我的腾讯微博|我的google+
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明
相关日志
- linux下查看系统运行时间和最近一次的开机启动时间 (0)
- linux系统编程:fork()函数用法示例 (0)
- linux系统编程:select()示例程序 (0)
- 我的linux分区方案 (5)
- Tango3 SDK Bring-up Tutorial (0)
- linux用shell获取本机的IP地址 (0)
- 纪念下,终于编译成功了第一个内核 (2)
- 编译cs_rootfs提示"genext2fs: couldn't allocate a block (no free space)"error的解决办法 (1)
- linux shell 获取计算机公网IP地址的几种写法 (1)
- linux定时备份,删除上月备份的数据库脚本 (0)
可从此处完成的操作:
- 使用 Google 阅读器订阅averiany涂鸦馆
- 开始使用 Google 阅读器,轻松地与您喜爱的所有网站保持同步更新
没有评论:
发表评论