c语言open不同的编码格式,C语言中open与fopen的区别
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的区别相关推荐
- c语言char有什么作用,C语言中char*和char[]用法区别分析
本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正 ...
- c语言put语句的作用,C语言中put()与puts()的区别?
C语言中put()与puts()的区别? 关注:275 答案:2 mip版 解决时间 2021-02-04 15:47 提问者笑低了眉眼 2021-02-04 12:42 C语言中put()与pu ...
- c语言对c99标准声明,C语言中C89与C99的区别
1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只 有借助restrict指针表达式才能访问对象.restrict指针指针 ...
- c语言中 char怎样用,C语言中char*和char[]用法区别分析
C语言中char*和char[]用法区别分析 本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很 ...
- 实例分析C语言中strlen和sizeof的区别
C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...
- c语言中sbit什么意思,c语言中bit和sbit的区别.doc
c语言中bit和sbit的区别 c语言中bit和sbit的区别?? 1.bit和sbit都是C51扩展的变量类型. ??????? bit和int char之类的差不多,只不过char=8位, bit ...
- C语言中union与struct的区别及sizeof的计算方式
C语言中union与struct的区别 2011-08-02 23:41 45人阅读 评论(0) 收藏 举报 在C语言中结构体和联合具有细微差别,特别是使用sizeof()对其求大小时,许多刚刚接触C ...
- C语言中char*和char[]用法区别分析
本文实例分析了C语言中char * 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指 ...
- 浅谈Java语言中ArrayList和HashSet的区别
Java语言中ArrayList和HashSet的区别 2019-04-10 13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...
最新文章
- netstat 查看监听的端口程序
- LeetCode: Longest Consecutive Sequence [128]
- word操作快捷键记录
- windows下使用curl以及常用curl命令
- java 兔子生仔问题
- [Err] 1064 - You have an error in your SQL syntax check the manual that corresponds to 之Mysql报错
- 硅谷Web 2.0时代即将结束? 实用型公司更受关注
- python 面试题 -------------- get 和 post 请求的 区别
- BlackHat 2015:如何用洗衣机盗取计算机文件
- python全自动化渗透工具_Python自动化渗透(一)
- wordpress英文主题怎样汉化成中文网站模板
- 家用路由器与企业路由器有什么区别
- QQ群设置里的“不提示消息只显示数目”与“接收不提示消息”的区别
- Cytoscape Web 实现网络拓扑结构图
- Python tkinter库:简易画板(笔、直线、矩形、圆形和橡皮擦工具+导入、保存、撤销、清屏功能)
- 移动端手机调试的方法
- 国内被广泛模仿的12个国外网站
- 三菱FX5U系列PLC模拟量使用方法及相关参数设置
- C++学习笔记:指向指针的指针
- 2016年蓝桥杯A组 第九题 密码脱落
热门文章
- vmware 安装及使用虚拟机注意事项
- 用ANSYS画矩形_用SolidWorks画一个带波浪纹路的瓶子
- 编程语言python怎么读-0编程基础,什么语言也没学过,请问学Python怎样入门?...
- python电脑下载安装-python
- 开课吧python小课学了有用吗-这个神仙技能,让你为所欲为!速来 !
- 为何python不好找工作-为什么我不建议你通过 Python 去找工作?
- 想学python买什么书好-学习 Python 用哪本书好?
- php和python-现在自学php和python那个合适?
- monty python读音-Monty Python
- 语音性别识别_语音识别识别性别_语音文字识别 - 云+社区 - 腾讯云