文件操作

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main(void) {
    /*
     * 打开文件
     * int open (const char *__file, int __oflag, ...)
     * __file 文件路径
     * __oflag 打开状态
     *      O_RDONLY 只读
     *      O_WRONLY 只写
     *      O_RDWR 可读可写
     *      O_APPEND 追加
     *      O_CREAT 不存在即创建,存在则打开
     *      O_EXCL 不存在即创建,存在则报错
     *      O_TRUNC 不存在即创建,存在则清空
     * ... mode 文件权限
     *
     * 返回值:成功返回文件描述符,失败返回 -1
     * */
    int f = open("./text.txt", O_RDWR|O_CREAT, 777);

    /*写入文件
     * ssize_t write (int __fd, const void *__buf, size_t __n)
     *__fd 文件描述符
     * __buf 要写入的数据
     * __n 写入数据的字节数
     *
     * */
    char *s = "这是我写入的内容";
    write(f, s, strlen(s));
    /*关闭文件
     * int close (int __fd)
     * __fd 文件描述符
     * */
    close(f);
    f = open("./text.txt",O_RDONLY);
    /*读取文件
     * ssize_t read (int __fd, void *__buf, size_t __nbytes
     * __fd 文件标识
     * __buf 要读出的内容
     * __nbytes 要读的字节
     * */
    char s2[128] = {};
    read(f,s2,sizeof(s2)-sizeof(s2[0]));
    printf("%s\n",s2);
    /*
     * 文件光标操作
     * lseek (int __fd, __off_t __offset, int __whence)
     * __fd 文件标识
     * __offset 偏移量
     * __whence 以什么位置偏移
     *      SEEK_SET 开头位置
     *      SEEK_CUR 当前位置
     *      SEEK_END 结束位置(例:文件结尾往前3个字节 lseek(fd,-3,SEEK_END))
     * 返回值:成功返回调整后的文件位置,失败返回-1
     * */
    
    /*复制文件表项(文件表项是记录文件信息的一个结构体每打开一次文件就会成生成一个文件表项,就算打开的一相同的文件也会生成不同的文件表项,文件表项中记录了文件当前的位置等信息)
     * int dup (int __fd)
     * __fd 要复制的文件句柄
     * 返回一个文件句柄(会复制到当前可用的最小的句柄上,复制时会把之前的文件位置也一起复制)
     * */

    /*复制文件表项(文件表项是记录文件信息的一个结构体每打开一次文件就会成生成一个文件表项,就算打开的一相同的文件也会生成不同的文件表项,文件表项中记录了文件当前的位置等信息)
   * iint dup2 (int __fd, int __fd2)
   * __fd 要复制的文件句柄
     * __fd2 要复制到哪人句柄上(如果句柄之前被使用会先关闭之前的文件,然后复制)
   * 返回一个文件句柄(复制时会把之前的文件位置也一起复制)
   * */
    

}




}

posted on 2023-02-15 20:16  信奉上帝的小和尚  阅读(3)  评论(0编辑  收藏  举报

导航