Unix C 学习之文件操作

  1. int open(const char *pathname, int flags,…);
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    功能:打开一个文件 有可能创建一个文件
    参数:pathname 指定了要打开的文件的路径
             flags三选一:O_RDONLY 只读,O_WRONLY 只写 ,O_RDWR 可读可写
             文件的创建标记 文件的身份标记 0或多个可以按位或到flags中,详细见man手册
             O_CREAT 如果文件不存在,将创建文件.
             O_EXCL 如果和O_CREAT一起指定,文件存在的情况下,报错
             O_TRUNC 文件存在的情况下,将文件的内容清空为0.
             O_APPEND 以追加模式打开文件,每次写之前,读写位置被定位在文件的末尾.

                  … 可变参数 这个参数有没有取决于flags 如果flags中出现O_CREAT.这个参数必须提供.这个参数
                  mode,指定了新建文件的权限指定的权限会被进程的umask修改.方法如下:mode & ~umask

                  返回值:成功 返回新的文件描述符 失败 -1 errno被设置

补充: 1 … 可变参数 可变参数的个数和类型取决于可变参数前边的那个参数.
int printf(const char*format, …);
printf(“hello beijing\n”);
printf(“name=%s\n”,name);
printf(“name=%s\tage=%d\n”,name,age);
2 文件描述符 程序运行的时候,需要访问计算机的资源,需要对这些资源的访问做记录. 记录在进程PCB(process control block)。文件是计算机的一种资源 进程对文件的访问就要做记录.
标准输入 0 STDIN_FILENO
标准输出 1 STDOUT_FILENO
标准错误输出 2 STDERR_FILENO

  1. int close(int fd);
    #include <unistd.h>
    功能:关闭一个文件描述符
    参数:fd 指定要关闭的文件描述符
    返回值:成功 0 错误 -1 errno被设置

  2. read(2)/write(2)
    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);
    功能:从文件描述符读取数据到buf
    参数:
    fd 指定具体的文件描述符 也就是从这个文件描述符读取数据
    buf 将读取的数据放到buf指定的空间里
    count 请求系统读取的最大字节数
    返回值:错误 -1 errno被设置 成功 返回实际读取到的字节数 0代表到达文件的末尾
     
    #include <unistd.h>
    ssize_t write(int fd, const void *buf, size_t count);
    功能:将buf中的数据写入fd指定的文件中
    参数:
    fd 指定具体的文件描述符
    buf 写入文件的数据存储buf指定的地址空间里
    count 请求写入文件的字节数
    返回值:错误 -1 errno被设置 成功 实际写入的字节数被返回 0代表什么都没写

  3. off_t lseek(int fd, off_t offset, int whence);
    #include <sys/types.h>
    #include <unistd.h>
    功能:重新定位文件的读写位置
    参数:
    fd 指定了文件的描述符 就是要操作这个文件的读写位置
    offset 相对参照物的偏移量
    whence
    SEEK_SET 将文件的读写位置定位在offset指定的字节处 文件的起始位置+offset
    SEEK_CUR 将文件的读写位置定位在当前位置+offset字节处
    SEEK_END 将文件的读写位置定位在文件的大小+offset字节处
    返回值:
    错误 (off_t) -1 errno被设置
    成功 定位的位置距离文件开头的字节数

  4. dup(2) dup2(2) 实现文件描述符的复制
    #include <unistd.h>
    int dup(int oldfd);
    功能: 复制一个文件描述符
    参数:
    oldfd 源描述符
    返回值:
    错误 -1 errno被设置
    成功 返回新的文件描述符 新文件描述符是最小的 未使用的那个文件描述符
     
    int dup2(int oldfd, int newfd);
    功能:复制一个文件描述符
    参数:
    oldfd 指定源描述符
    newfd 指定目标描述符 如果目标描述符是打开的,先关闭,再使用
    返回值:
    错误 -1 errno被设置
    成功 返回新的文件描述符

使用小结:
用完关闭,即调用close(2)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值