文件操作函数
1.open
2.read
3.write
4.close
5.lseek 文件拓展,重置指针位置
6.stat fileName 查询文件的属性信息【对应的命令】
stat函数,特性--能够穿透(跟踪)符号链接【类似vi编辑器】
lstat函数,特性--不穿透(跟踪)符号链接【类似ls -l 或rm】
access函数,测试文件权限
truncate 指定文件大小
unlink 关闭文件时删除临时文件
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> int main() { //新建一个临时文件并打开 int fd = open("tempfile", O_CREAT | O_RDWR, 0664); if(fd == -1) { perror("open"); error(1); } //删除临时file,在文件被关闭时删除 int ret = unlink("tempfile"); //写文件 write(fd, "hello ", 6); //重置文件指针 lseek(fd, 0, SEEK_SET); //read file char buf[24] = {0}; int len = read(fd, buf, sizeof(buf)); //讲读出来的内容写到屏幕上 write(1, buf, len); close(fd); return 0; }
目录操作函数:
man 2 函数名 【查询文档】
chdir 修改当前进程的路径
getcwd 获取当前进程的工作目录
man 3 函数名 【查询文档】
dup 返回的是文件描述表中没有被占用的最小的文件描述符,新旧两个文件描述符都可以访问同一个文件
dup2(old, new) 如果old和new是两个不同的文件描述符,如果new是一个被打开的文件描述符,在拷贝之前先关掉new,然后new指向old对应的文件
如果old和new是同一个文件描述符,不会关掉new,直接返回old
fcntl 改变已经打开的文件属性
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(void) { int fd; int flag; //测试字符串 char *p = "pppppppppppppppppppp "; char *q = "qqqqqqqqqqqqqqqqqqqqq "; //只写的方式打开文件 fd = open("test.txt", O_WRONLY); if(fd == -1) { perror("open"); exit(1); } //输入新的内容,该部分会覆盖原来旧的内容 if(write(fd, p, strlen(p)) == -1) { perror("write p"); exit(1); } //使用F_GETFL命令得到文件状态标志 flag = fcntl(fd, F_GETFL, 0); if(flag == -1){ perror("fcntl"); exit(1); } //将文件状态标志添加“追加写选项” flag |= O_APPEND; //将文件状态修改为追加写 if(fcntl(fd, F_SETFL, flag) == -1) { perror("fcntl -- append write"); exit(1); } //再次输入新内容,该内容会追加到旧内容的后面 if(write(fd, q, strlen(q)) == -1) { perror("write q again"); exit(1); } //关闭文件 close(fd); }
目录操作相关函数
opendir readdir closedir