在《linuxC编程实战》书中,有一个my_rwl.c的小程序(详见P151):首先利用open函数或者creat函数创建一个文件,利用write函数将数据写入文件,再利用read函数读出文件中数据;用lseek移动文件指针,再写入相同的数据,最终读出所有数据。创建代码如下:// if((fd=creat("example_63.c",S_IRWXU))==-1)

if((fd=open("example_63.c",O_CREAT|O_TRUNC|O_RDWR,S_IRWXU))==-1)

{

my_err2("creat",errno,__LINE__);

}

在调试此程序的时候,总是出现这样的情况:利用open函数创建文件的时候,一些正常。利用creat函数创建文件的时候,读出的数据总是乱码,并且提示读写失败的错误信息。在自己寻求结果无望的时候,在chinaUnix论坛得到了帮助:creat只能以只写方式打开文件。其实书上有这句话,可是在我寻求上述错误答案的时候,也没有注意到它的存在。而且我还有有这样的错误概念:即便creat函数只能以只写方式打开文件,可是我创建的时候有S_IRWXU参数,那么它便可以写了。

那么,让我重新理解它:

1.文件的打开方式是指文件以只读、只写、可读写那种方式打开,返回的文件描述符就可以对此文件进行相应的读写操作。比如上述的creat函数对example_63.c以只写方式打开,那么就只能对这个文件进行写,因此后续的读操作都失败。而open创建文件的时候,有O_RDWR参数,因此可以成功对文件读写。

2.文件的操作权限是指系统中各用户对此文件的使用权限,依参数而定。

3.以创建的角度来看,creat和open的作用相同。但以打开文件的方式来看,前者只能以只写方式,后者由于参数的关系,以可读写方式打开。

如果要解决上述的错误,那么可以在creat创建完文件后,关闭文件,再以可读写的方式,open这个文件。这么做是很麻烦,但是这里我们为了搞清楚两者的区别,也无所谓了。

Linux以只写方式打开文件,creat只能以只写方式打开文件相关推荐

  1. 文件的读写操作(备份,批量操作文件)

    随后的代码,使用狗类进行演示说明 类名: Dog(狗类) 属性:     姓名 name     年龄 age     .... 方法:     吃  eat()     玩  play()     ...

  2. linux c 追加写文件内容,如何在C中追加到文件,在Linux上使用O_APPEND模式打开?

    这是家庭作业的一部分.好吧,我的作业无法正常工作,所以我已经把一个片段拿出来并开始用它来弄清楚什么是错的. 在C语言的Linux上我试图打开/创建一个文本文件,给它写一些东西,关闭它,在读/写和追加模 ...

  3. java在linux创建文件_Java中创建并写文件的5种方式

    导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...

  4. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  5. linux隐写文件剥离,杂项的基本解题思路(1)——文件操作隐写、图片隐写

    文件操作隐写 图片隐写 压缩文件处理 流量取证技术 文章本来是分成4部分的,但是前两部分何在一起写了也就没有分开,所以干脆就只分了两部分 文件基本类型的识别 一.kail 下 file 文件名 原理就 ...

  6. python写日志文件_Python logging日志模块 配置文件方式

    在一些微服务或web服务中我们难免需要日志功能,用来记录一些用户的登录记录,操作记录,以及一些程序的崩溃定位,执行访问定位等等; Python内置 非常强大的日志模块 ==> logging 今 ...

  7. 系统调用-文件访问 创建、打开、关闭、读、写

    系统调用-文件访问 本文特色,该文件操作与linux操作系统shell命令对比讲解! Linux中文件变成可以使用两种方法 1.Linux的系统调用 2.C语言函数的调用 前者是依赖于操作系统的 后者 ...

  8. linux打开txt文件命令_「linux命令详解」lsof命令解析,教你一步打开所有文件

    专注分享C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协 ...

  9. 【Linux】制作U-Boot烧写镜像到SD卡的过程(中篇:LDS文件)

    上一篇文章,讲述了制作U-Boot烧写镜像到SD卡的过程,其中运用make的方式来进行将.s文件编译成.bin文件,那make是什么意思?它主要实现了什么? 先讲一下,如果不采用make的方式该怎样实 ...

最新文章

  1. everything文件搜索_本地文件搜索神器,Everything、Listary、AnyTXT Searcher!
  2. 感恩节祝福html,感恩节祝福英文
  3. echarts php 数据处理,PHP+echarts读取地图数据
  4. [HTML5]3D标签云
  5. python基础论文_北大博士Python学习笔记,Python基础语法总结,一篇文章带你入门...
  6. 生成对抗网络gan原理_必读!TOP10生成对抗网络GAN论文(附链接)
  7. cocos2d-x android 环境搭配,cocos2d-x Android环境配置问题和解决方法
  8. win2012 ad用户和计算机,Server2012R2搭建AD域服务器并添加登录用户
  9. python识别手写文字_如何快速使用Python神经网络识别手写字符?(文末福利)
  10. SequoiaDB数据水平分区简介
  11. RocketMQ的一些基本概念和RocketMQ特性的讲解
  12. 用户微信好友关系属于个人隐私吗?深圳南山法院说不属于...
  13. git rebase基础
  14. ELK官方文档:在Kibana加密通讯
  15. Mybatis generator 自动生成代码(实例讲解)
  16. 动态规划之LIS(最长上升子序列)
  17. 服务器安全设置篇(珍藏补充版中)
  18. Python爬虫书籍分享
  19. 【破解】百度网盘不限速(亲测可用)
  20. 《青山翠影》伍 现实的拷问 | 一错又错

热门文章

  1. java中break什么意思_Java中break的第三种用法说明
  2. Linux 文件管理 : paste 命令详解
  3. (27)打鸡儿教你Vue.js
  4. 四川羌族文化展览网站界面设计与实现(html前端设计)
  5. 热血江湖服务端 linux,热血江湖V2.0商业服务端百宝阁 GM工具+客户端+架设教程
  6. Amount of Degrees
  7. Linux 下删除当前目录及子目录下的所有.o文件
  8. [管理故事]:路遥知马力,日久见人心。
  9. 如何通俗地理解傅立叶变换?
  10. 怎样将黑白照片变彩色?怎么给黑白照片上色?