int open(const char *path, int access,int mode)

path 要打开的文件路径和名称

access 访问模式,宏定义和含义如下:

O_RDONLY         1    只读打开

O_WRONLY         2    只写打开

O_RDWR           4    读写打开

还可选择以下模式与以上3种基本模式相与:

O_CREAT     0x0100   创建一个文件并打开

O_TRUNC     0x0200   打开一个已存在的文件并将文件长度设置为0,其他属性保持

O_EXCL      0x0400   未使用

O_APPEND    0x0800   追加打开文件

O_TEXT      0x4000   打开文本文件翻译CR-LF控制字符

O_BINARY    0x8000   打开二进制字符,不作CR-LF翻译

mode 该参数仅在access=O_CREAT方式下使用,其取值如下:

S_IFMT      0xF000   文件类型掩码

S_IFDIR     0x4000   目录

S_IFIFO     0x1000   FIFO 专用

S_IFCHR     0x2000   字符专用

S_IFBLK     0x3000   块专用

S_IFREG     0x8000   只为0x0000

S_IREAD     0x0100   可读

S_IWRITE    0x0080   可写

S_IEXEC     0x0040   可执行

FILE *fopen(char *filename, char *mode)

filename 文件名称

mode 打开模式:

r   只读方式打开一个文本文件

rb  只读方式打开一个二进制文件

w   只写方式打开一个文本文件

wb  只写方式打开一个二进制文件

a   追加方式打开一个文本文件

ab  追加方式打开一个二进制文件

r+  可读可写方式打开一个文本文件

rb+ 可读可写方式打开一个二进制文件

w+  可读可写方式创建一个文本文件

wb+ 可读可写方式生成一个二进制文件

a+  可读可写追加方式打开一个文本文件

ab+ 可读可写方式追加一个二进制文件

open和fopen的区别:

前者属于低级IO,后者是高级IO。

前者返回一个文件描述符,后者返回一个文件指针。

前者无缓冲,后者有缓冲。

前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。

后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

fopen的一个实现

#if        defined(_POSIX_SOURCE)

#include

#endif

#include

#include

#include        "loc_incl.h"

#define        PMODE                0666

#define        O_RDONLY        0

#define        O_WRONLY        1

#define        O_RDWR                2

#define        O_CREAT                0x010

#define        O_TRUNC                0x020

#define        O_APPEND        0x040

int _open(const char *path, int flags);

int _creat(const char *path, Mode_t mode);

int _close(int d);

FILE *

fopen(const char *name, const char *mode)

{

register int i;

int rwmode = 0, rwflags = 0;

FILE *stream;

int fd, flags = 0;

for (i = 0; __iotab[i] != 0 ; i++)

if ( i >= FOPEN_MAX-1 )

return (FILE *)NULL;

switch(*mode++) {

case 'r':

flags |= _IOREAD | _IOREADING;

rwmode = O_RDONLY;

break;

case 'w':

flags |= _IOWRITE | _IOWRITING;

rwmode = O_WRONLY;

rwflags = O_CREAT | O_TRUNC;

break;

case 'a':

flags |= _IOWRITE | _IOWRITING | _IOAPPEND;

rwmode = O_WRONLY;

rwflags |= O_APPEND | O_CREAT;

break;

default:

return (FILE *)NULL;

}

while (*mode) {

switch(*mode++) {

case 'b':

continue;

case '+':

rwmode = O_RDWR;

flags |= _IOREAD | _IOWRITE;

continue;

default:

break;

}

break;

}

if ((rwflags & O_TRUNC)

|| (((fd = _open(name, rwmode)) < 0)

&& (rwflags & O_CREAT))) {

if (((fd = _creat(name, PMODE)) > 0) && flags  | _IOREAD) {

(void) _close(fd);

fd = _open(name, rwmode);

}

}

if (fd < 0) return (FILE *)NULL;

if (( stream = (FILE *) malloc(sizeof(FILE))) == NULL ) {

_close(fd);

return (FILE *)NULL;

}

if ((flags & (_IOREAD | _IOWRITE))  == (_IOREAD | _IOWRITE))

flags &= ~(_IOREADING | _IOWRITING);

stream->_count = 0;

stream->_fd = fd;

stream->_flags = flags;

stream->_buf = NULL;

__iotab[i] = stream;

return stream;

}

c语言open不同的编码格式,C语言中open与fopen的区别相关推荐

  1. c语言char有什么作用,C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正 ...

  2. c语言put语句的作用,C语言中put()与puts()的区别?

    C语言中put()与puts()的区别? 关注:275  答案:2  mip版 解决时间 2021-02-04 15:47 提问者笑低了眉眼 2021-02-04 12:42 C语言中put()与pu ...

  3. c语言对c99标准声明,C语言中C89与C99的区别

    1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只 有借助restrict指针表达式才能访问对象.restrict指针指针 ...

  4. c语言中 char怎样用,C语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析 本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很 ...

  5. 实例分析C语言中strlen和sizeof的区别

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  6. c语言中sbit什么意思,c语言中bit和sbit的区别.doc

    c语言中bit和sbit的区别 c语言中bit和sbit的区别?? 1.bit和sbit都是C51扩展的变量类型. ??????? bit和int char之类的差不多,只不过char=8位, bit ...

  7. C语言中union与struct的区别及sizeof的计算方式

    C语言中union与struct的区别 2011-08-02 23:41 45人阅读 评论(0) 收藏 举报 在C语言中结构体和联合具有细微差别,特别是使用sizeof()对其求大小时,许多刚刚接触C ...

  8. C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char * 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指 ...

  9. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

最新文章

  1. netstat 查看监听的端口程序
  2. LeetCode: Longest Consecutive Sequence [128]
  3. word操作快捷键记录
  4. windows下使用curl以及常用curl命令
  5. java 兔子生仔问题
  6. [Err] 1064 - You have an error in your SQL syntax check the manual that corresponds to 之Mysql报错
  7. 硅谷Web 2.0时代即将结束? 实用型公司更受关注
  8. python 面试题 -------------- get 和 post 请求的 区别
  9. BlackHat 2015:如何用洗衣机盗取计算机文件
  10. python全自动化渗透工具_Python自动化渗透(一)
  11. wordpress英文主题怎样汉化成中文网站模板
  12. 家用路由器与企业路由器有什么区别
  13. QQ群设置里的“不提示消息只显示数目”与“接收不提示消息”的区别
  14. Cytoscape Web 实现网络拓扑结构图
  15. Python tkinter库:简易画板(笔、直线、矩形、圆形和橡皮擦工具+导入、保存、撤销、清屏功能)
  16. 移动端手机调试的方法
  17. 国内被广泛模仿的12个国外网站
  18. 三菱FX5U系列PLC模拟量使用方法及相关参数设置
  19. C++学习笔记:指向指针的指针
  20. 2016年蓝桥杯A组 第九题 密码脱落

热门文章

  1. vmware 安装及使用虚拟机注意事项
  2. 用ANSYS画矩形_用SolidWorks画一个带波浪纹路的瓶子
  3. 编程语言python怎么读-0编程基础,什么语言也没学过,请问学Python怎样入门?...
  4. python电脑下载安装-python
  5. 开课吧python小课学了有用吗-这个神仙技能,让你为所欲为!速来 !
  6. 为何python不好找工作-为什么我不建议你通过 Python 去找工作?
  7. 想学python买什么书好-学习 Python 用哪本书好?
  8. php和python-现在自学php和python那个合适?
  9. monty python读音-Monty Python
  10. 语音性别识别_语音识别识别性别_语音文字识别 - 云+社区 - 腾讯云