在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻,

所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧!

文件编程有两种方式,一是系统调用方式,二是库函数调用。

前者依赖特定的平台,后者不依赖平台。

系统调用:创建

int creat(const char *filename,mode_t mode);

filename:要创建的文件名

mode:创建模式

S_IRUSR->1

S_IWUSR->2

S_IWXUSR->4

S_IRWXU->7

系统调用举例:

#include <stdio.h>

#include<stdlib.h>

#include<sys/types.h>

#include<fcntl.h>

void create_file(char *filename)

{

  if(creat(fileanme.,0755)<0)

  {

  printf("create file %s is failuer!\n",filename);

  }

  else

  {

   printf("create file %s is success!\n",filename)

    }

}

int main(int argc,char *argv[])

{

  int i;

  if(argc<2)

  {

  perror("you haven't input the filename ,please try agin!\n");

  exit(EXIT_FAILUER);

  }

  for(i=1;i<argc;i++)

  {

    create_file(argv[i]);

  }

  exit(EXIT_SUCCESS);

}

文件描述:文件描述符 范围0-OPEN-MAX。早期允许每个进程打开20个。现在有些增长到1024个。

系统调用-打开

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

int open(const cahr*pathname,int falgs,mode_t mode);

flags:打开标志

O_RDONLY

O_WRONLY

O_RDWR

O_APPEBD:追加方式打开

O_CREAT:必须使用函数 int open(const cahr*pathname,int falgs,mode_t mode);

O_NOBLOCK:非阻塞方式打开

举例:

#include<stdio.h>

#include<stdlib.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int main(int argc,char *argv[])

{

  int fd;

  if(argc<2)
  {

  puts("please input yhe open file pathname!\n");

  exit(1);

  }

if((fd=open(argv[1],O_CREAT|)CREAT_ORDWR,0755)<0)

{

  perror("open file failuer!\n");

  exit(1);

}

  else

{

  printf("open file %d is success!\n",fd);

}

  close(fd);

  exit(0);

}

文件关闭:

int close(fd);

系统调用-读

int read(int fd ,const void *buf,size_t length);

从文件描述符fd所指定的文件中读取length个字节到buf所指定的缓冲区,返回实际读取的字节数。

写:int write(int fd ,const void *buf,size_t length);

定位:

int lseek(int fd,offset_t offset,int whence);

将文件读写指针相对于whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。

whence:

SEEK_SET:相对文件开头

SEEK_CUR:相对文件读写指针的当前位置

SEEK_END:相对文件末尾

计算文件长度:

系统调用-访问判断:

int  access(const char*pathname,int mode);

mode:要判断的访问权限。可以取以下值或他们的组合

R_OK

W_OK

X_OK

F_OK:文件存在

成功返回0,否则条件不符合则返回1。

举例:

#include<unistd.h>

int main()

{

  if(access("/etc/passwd",R_OK)==0)

  printf("/etc/passwd can be read!"\n);

}

linux应用程序开发-文件编程-系统调用方式的更多相关文章

  1. linux应用程序开发-文件编程-库函数

    ---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...

  2. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  3. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  4. Linux上删除大量文件几种方式对比

    目录 Linux上删除大量文件几种方式对比 1. rm删除:因为文件数量太多,rm无法删除(报错) 2. find查找删除:-exec 3. find查找删除:xargs 4. find调用-dele ...

  5. Linux入门-程序开发

    Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...

  6. linux文件编程----系统调用

    linux中文件编程可以使用两种方法: 1).linux系统调用 2).C语言库函数 前者依赖于linux系统,后者与操作系统是独立的. 在 linux系统中,所有打开的文件也对应一个数字,这个数字由 ...

  7. 《嵌入式linux应用程序开发标准教程》笔记——8.进程间通信

    , 8.1 概述 linux里使用较多的进程间通信方式: 管道,pipe和fifo,管道pipe没有实体文件,只能用于具有亲缘关系的进程间通信:有名管道 named pipe,也叫fifo,还允许无亲 ...

  8. 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发

    进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...

  9. Linux下重要日志文件及查看方式

    http://os.51cto.com/art/201108/282184_all.htm   1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...

随机推荐

  1. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  2. ios计算内容的高度 (含7.0前及以后的版本的用法)

    + (CGFloat)heightForContent:(MyMsgTextModel *)content withWidth:(CGFloat)width { CGSize contentSize; ...

  3. Java工具

    1. Groovy shell 可以在Java代码里执行脚本,可以将Java方法配置在文件里 依赖 <dependency> <groupId>org.codehaus.gro ...

  4. Linux Shell编程基础

    在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐 ...

  5. 配置fabric-crashlytics教程

    1. 注册账户 登录网站  https://try.crashlytics.com/ 来注册新的账户,审核通过时间为几个小时或者1到2天不等.然后注册时候输入的邮箱就会收到如下的邀请涵 2. acco ...

  6. SQL Nexus

    在前面的SQLdiag系列中有提到SQLNexus,当时我们用SQLNexus查看了Perfmon Summary(性能计数器).ReadTrace Reports(跟踪文件)两项报表.SQLNexu ...

  7. 使用MapReduce实现一些经典的案例

    在工作中,很多时候都是用hive或pig来自动化执行mr统计,但是我们不能忘记原始的mr.本文记录了一些通过mr来完成的经典的案例,有倒排索引.数据去重等,需要掌握. 一.使用mapreduce实现倒 ...

  8. 20145320 《Java程序设计》第5周学习总结

    20145320 <Java程序设计>第5周学习总结 教材学习内容总结 8.1 语法与继承架构 try.catch Java中的错误会被包装为对象,而使用try与catch,JVM会执行t ...

  9. 学习OpenCV——Gabor函数的应用

    原文:http://blog.csdn.net/yao_zhuang/article/details/2532279 下载cvgabor.cpp和cvgabor.h到你的C/C++工程目录下 注:在我 ...

  10. VI中的多行删除与复制

    VI中的多行删除与复制 法一: 单行删除,:(待删除行)d 多行删除 ,:,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, ...