持续一个礼拜的出差终于结束了,本次出差真是收益良多,不仅品尝了正宗的大闸蟹,同时也是第一次体验了产品的现场实施流程。

  明天开始继续学习Linux!

  ——————————————————————分割线————————————————————————————————————

  因为各种原因,已经有十天没有更新了,真是太不应该了,以后一定杜绝这种懒惰、无耻的情况!!

  ——————————————————————分割线————————————————————————————————————

  古话说得好,在Linux之下,一切皆是文件。

  有很多资源,Linux都可以用文件的方式来使用,在以前的单片机开发中,也使用过文件系统,稍稍有那么一些经验,所以在这点上的学习,应该难不倒我……

  在Linux下,常用的文件操作也无外乎,open,wirte,read,seek之类的。

  要使用这些函数,需要包含以下头文件:

  #include<sys/types.h> // 定义了一些数据类型

  #include<fcntl.h> // 定义了open,create函数的原形,创建文件权限的宏S_IRUSR等

  #include<unistd.h> // 这里面定义了write,read,seek等函数原形

  #include<errno.h>// 这个主要是用来调试用的,里面有一个变数,如果出了错误,那就能用到

  ……

  简单浏览了一下这些函数的接口,下面开始写代码……

  功能:创建一个名为IO_Opreation.txt的文件,在里面写一句话,然后关闭,在读回来。

 #include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h> void main(void)
{
  int fd;
  char filename[] = {"io_opreation.txt"};
  char writedate[] = {"你好啊!"};
  char readdate[];   fd = open(filename,O_WRONLY|O_CREAT,0x777);
  write(fd,writedate,sizeof(writedate));
  close(fd);
  fd = open(filename,O_RDONLY);
  read(fd,readdate,);   return ;
}

  程序写完了,简直完美!!!

  现在开始写makefile

  花了半个小时,makefile也完工了:

 EXE=io_opreation
SRC=io_opreation.c
OBJ=io_opreation.o cc=gcc
CFLAG=-g
LCDFLAG= EXE:$(OBJ)
  $(cc) $(LCDFLAG) $(SRC) -o $(EXE) OBJ:$(SRC)
  $(cc) -c $(SRC) -o $(OBJ) .PHONY:clean
clean:
  rm -vfr $(OBJ) $(EXE)

  编译一下……咦?

  io_opreation.c:20:2: 警告: 在无返回值的函数中,‘return’带返回值 [默认启用]
  哦哦哦!原来如此,都怪自己手贱!

 #include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h> void main(void)
{
int fd;
char filename[] = {"io_opreation.txt"};
char writedate[] = {"你好啊!"};
char readdate[]; fd = open(filename,O_WRONLY|O_CREAT,0x777);
write(fd,writedate,sizeof(writedate));
close(fd);
fd = open(filename,O_RDONLY);
read(fd,readdate,); return;
}

  把返回值的零删掉,再试一下!

cc -c -o io_opreation.o io_opreation.c
gcc io_opreation.c -o io_opreation

一切大丈夫!!

现在执行一下……

我擦!执行以后怎么什么反应都没有???

原来我都没有输出!

修改代码,将读回来的东西,打印出来……对了最后还得调用close函数把文件关了(这算是个bug!需要review!!)。

 #include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
#include<stdio.h>
void main(void)
{
int fd;
char filename[] = {"io_opreation.txt"};
char writedate[] = {"你好啊!"};
char readdate[]; fd = open(filename,O_WRONLY|O_CREAT,0x777);
write(fd,writedate,sizeof(writedate));
close(fd);
fd = open(filename,O_RDONLY);
read(fd,readdate,);
close(fd); printf("%s\n",readdate); return;
}

再度编译,执行!!

vmuser@Linux-host:~/work/IO_opreation$ ./io_opreation
你好啊▒

代码执行以后,输出倒是有了……但是好像哪里有点不对!那个奇怪的符号是哪里冒出来的?

read函数读出了乱码,赶紧check代码……

根据我调查,可能是由于read函数指定的读取字节数不够,因为我改成read(fd,O_RDONLY,)之后,就不存在那个乱码了!

文件也是按照要求创建出来了。
vmuser@Linux-host:~/work/IO_opreation$ ./io_opreation
你好啊!
vmuser@Linux-host:~/work/IO_opreation$

如果有知道原理的朋友,看见了一定告诉我一下,我会很感激的!

Linux学习笔记(6)-文件I/O的更多相关文章

  1. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  2. Linux学习笔记之文件权限

    前言: 说起文件权限,大家在windows下应该很熟悉就对文件右键属性,然后配置一点什么读写之类的权限,然后可以分配到每个的人. 对于linux 我先为大家介绍一个使用者和组和其他的概念说明一下 文件 ...

  3. Linux学习笔记 -- 话说文件

    文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...

  4. linux 学习笔记之文件与管理

    前言: 对于windows来说,文件的系统管理都是非常简单的(这个应该有一个捂脸),通常就是重命名,复制,移动,删除,查看文件属性,查看文件内容,寻找文件.其实在图形化行中的linux也是有这样子功能 ...

  5. Linux学习笔记11——文件I/O之二

    一.文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. 1.每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2.内 ...

  6. linux学习笔记之文件类型,及目录介绍

    引用A:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/20/3033131.html 引用B:http://www.cnblogs.c ...

  7. Linux学习笔记05—文件与目录权限

    1. 绝对路径与相对路径绝对路径:路径的写法一定由根目录 ‘/’写起,例如 /usr/local/mysql 这就是绝对路径相对路径:路径的写法不是由根目录 ‘/’写起,例如:首先用户进入到/, 然后 ...

  8. Linux学习笔记之文件读取过程

    0x00 概述 对于Linux系统来说,一切的数据都起源于磁盘中存储的文件.Linux文件系统的结构及其在磁盘中是如何存储的?操作系统是怎样找到这些文件进行读取的?这一章主要围绕这几个问题进行介绍(以 ...

  9. Linux学习笔记之文件与文件系统的压缩与打包

    四.文件与文件系统的压缩与打包 用途: 传输时减少带宽 Linux系统常见的压缩命令 Compass(旧版压缩,并且在centOS中默认为不安装) gzip, zcat bzip2, bzcat zi ...

  10. linux学习笔记二-----文件权限管理

    一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...

随机推荐

  1. Vue.JS 对比其他框架

    Angular 选择 Vue 而不选择 Angular,有下面几个原因,当然不是对每个人都适合: 在 API 与设计两方面上 Vue.js 都比 Angular 简单得多,因此你可以快速地掌握它的全部 ...

  2. [HAOI2009]求回文串

    神奇到爆炸的贪心,策略很简单.但是实现上好像比较恶心.换了一种思路.先保存所有点应该转移到的位置,BIT搞个逆序对就好了. 如何找到每个点应该转移到的位置?这个处理方式也是比较玄学.看代码吧. //O ...

  3. sql 从一个库中取某个表的数据导入到另一个库中相同结构的表中

    sql 2008 从一个库中把 某个表中的数据导入到另一个库中的具有相同结构的表中 use 库1 go insert into  库1.dbo.表1  select * from  库2.dbo.表1 ...

  4. 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则

    加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...

  5. ARCGIS常用几种本地数据AE初始化

    1.Personal GDB 新建一个在E盘的名为test的mdb: IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryCl ...

  6. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  7. 以空白符结尾的 alias

    网上经常有人问这个问题:为什么我写的 alias 在 sudo 下就不管用了? $ alias 'll=ls -l' $ sudo ll a-private-dir sudo: ll: command ...

  8. .NET导入Excel到SQL数据库

    在我们开发各类应用型系统,经常会遇到导入导出Excel,为什么会用到他呢?企业或者单位在从无信息化到信息化的一个转变过程.在没有信息化的企业或单位之前,一般都采用Excel来记录相应的数据,做统计计算 ...

  9. R语言-处理异常值或报错的三个示例

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...

  10. PHP控制输出不缓存头

    @header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); @header("Cache-Control: no-cache, ...