• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-系统IO接口之打开文件

10/25 09:51
371
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.open

用于打开或者创建一个文件。

2.头文件

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

3.函数原型

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

4.参数

1)pathname:表示想要打开的文件的绝对路径名,或者当前路径下的文件名。

2)flags:表示打开文件用的操作,以下三种互斥只能选择其一:

O_RDONLY:只读模式。

O_WRONLY:只写模式。

O_RDWR:可读可写。

以下几种可以选用,需要与上面三种其一进行位或(?| )运算后使用:

O_APPEND :表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。

O_CREAT :表示如果指定文件不存在,则创建这个文件。

O_EXCL :表示如果要创建的文件已存在,则出错,返回-1。

O_TRUNC :表示如果文件存在,并且以只写、读写方式打开,则将其内容清空。

O_NOCTTY :表示把这个终端设备打开后,不用作控制终端。

O_NONBLOCK:以非阻塞模式打开文件。

O_NOFOLLOW :如果打开的文件是一个符号连接, 则打开文件失败, 返回-1。

O_DIRECTORY:如果打开的不是一个目录,则打开文件失败, 返回-1。

O_SYNC:表示每次写入都等待物理I/O完成。

3)mode:表示创建新文件时,设置文件访问权限的初始值,其参数类型为mode_t,是一个u32无符号整型数据,只有低12位有效,并分为四组:000 000 000 000

S ??U ??G ?O

S表示特殊权限,U表示文件的所属用户权限,G表示同组用户权限,O表示其他用户权限,每组为3bit,顺序为rwx,r是读(100),w是写(010),x是可执行(001)。

例如0777代表的是000 111 111 111,即没有特殊权限,所有用户都有读写执行的权限。

5.返回值

操作成功返回文件描述符,操作失败返回-1。

6.示例:(以不同的方式分别打开四个文件,并打印各自的文件描述符)

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <stdio.h>

int main()

{

int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644);

//以只读模式打开test1文件,如果不存在就创建,权限为644

int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644);

int fd3 = open("./test3", O_RDWR | O_CREAT, 0664);

int fd4 = open("./test4", O_RDWR | O_CREAT | O_TRUNC, 0666);

printf("fd1:%dn", fd1);

printf("fd2:%dn", fd2);

printf("fd3:%dn", fd3);

printf("fd4:%dn", fd4);

return 0;

}

7.编译运行并查看测试结果

fd1:3 ??????????????????//从3开始说明0、1、2确实被系统占用

fd2:4

fd3:5

fd4:6

相关推荐