linuxC文件以及目录操作函数

opendir    --打开目录,返回DIR*指针,man 3 opendir 查看介绍,下面查看方法类似
readdir   --读取目录,返回struct dirent*结构体指针(dir entry)
closedir  --关闭目录DIR*
getcwd  --获取当前工作目录

下面是文件有关的函数:
stat  --获取文件属性,返回struct stat结构体,包括文件类型,大小修改时间,权限,用户id等等。能够透过符号链接
lstat  --类似stat,但是不能透过符号链接,也就是说如果是符号链接,就只是读到符号链接属性,不能读取到真实文件属性
access  --判断文件是否有某个权限(R_OK, W_OK, X_OK),也可以使用判断文件是否存在(F_OK)
chmod  --改变文件权限,第二个参数mode必须是一个8进制数,比如0755
chown  --改变文件所有者
rename  --重命名文件
truncate  --截取文件为指定长度,指定长度为0时,清空文件内容。
link  --创建一个硬链接,
symlink  --创建一个符号链接
readlink  --读取一个符号链接名称,是文件名称,不是文件内容,不能读取硬链接
unlink  --删除链接,如果是符号链接,直接删除符号链接。如果是硬链接,硬链接数减1,硬链接数为0时删除链接,所有也是删除文件的一种方法。注意:进程退出后才会真正的删除。
unlink由于需要等到进程退出后才会真正执行删除,所有一般用于删除程序运行时产生的临时文件,程序退出后,临时文件自动删除这个场景。

int fd = open("filename", O_CREAT | O_RDWR, 0755);  --打开一个文件,不存在时自动创建该文件,返回一个文件描述符
char* p= "this is test file ";
write(fd, p, strlen(p));  -- strlen计算字符串长度,write写入文件
close(fd);  --关闭文件

fcntl函数:man 3 fcntl查看文档
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
cmd有以下几种情况:
  复制文件描述符  -- F_DUPFD
  文件描述符标记  -- F_GETFD、F_SETFD
  文件状态     -- F_GETFL、F_SETFL
  异步IO所有权   -- F_GETOWN、F_SETOWN (man 3 open 可在open函数里查看所有权限)
  文件记录锁    -- F_GETLK、F_SETLK、F_SETLKW

  int flags = fcntl(fd, F_GETFD);
  flags |= FD_CLOEXEC;  //设置执行exec系列函数时自动关闭fd文件描述符
  fcntl(fd, F_SETFD, flags)









原文地址:https://www.cnblogs.com/yongfengnice/p/11809334.html