Loading...
墨滴

小余儿

2021/12/02  阅读:56  主题:默认主题

04_文件IO操作之open()函数

  1. open()函数依赖的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
  1. open函数声明
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
  1. open函数说明
  • open()函数打开文件后,返回的是文件夹描述符。

  • 新打开文件返回文件描述符表中未使用的最小文件描述符。

  • open返回值:成功返回新分配的文件描述符,出错返回-1并设置errno

  1. open()的flag参数选项
O_CREAT 创建文件
O_EXCL 创建文件是,如果文件存在则出错返回(和文件O_CREAT一起用)
O_TRUNC 把文件截断成0
O_RDONLY 只读(互斥)
O_WRONLY 只写(互斥)
O_RDWR 读写(互斥)
O_APPEND 追加,移动文件读写指针位置到文件末尾
O_NONBLOCK 非阻塞标志
O_SYNC 使每次write都等到物理I/O操作完成,包括文件属性的更新
  1. Linux中默认打开的文件描述
  • 在Linux系统,默认打开三个文件描述符,它们分别为:
STDIN_FILENO              0
STDOUT_FILENO             1
STDERR_FILENO             2
  1. 编写open()函数的小demo-实现touch命令
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

void touch_file(const char* filename)
{
    if (!filename)
    {
        printf("./a.out filename\n");
        return;
    }
    int fd = open(filename, O_RDONLY|O_CREAT, 0666);
    close(fd);
}
int main(int argc,char* argv[])
{
    touch_file(argv[1]);
    return 0;
}
  • 运行结果:
root@gamer:~/code# gcc io_file.c 
root@gamer:~/code# ls
a.out  io_file.c
root@gamer:~/code# ./a.out hello
root@gamer:~/code# ls
a.out  hello  io_file.c

小余儿

2021/12/02  阅读:56  主题:默认主题

作者介绍

小余儿