系统函数

文件操作函数
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

原文地址:https://www.cnblogs.com/zheaven/p/14140091.html