linux应用程序开发-文件编程-系统调用方式
在看韦东山视频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应用程序开发-文件编程-系统调用方式的更多相关文章
- linux应用程序开发-文件编程-库函数
---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 嵌入式Linux应用程序开发详解------(创建守护进程)
嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...
- Linux上删除大量文件几种方式对比
目录 Linux上删除大量文件几种方式对比 1. rm删除:因为文件数量太多,rm无法删除(报错) 2. find查找删除:-exec 3. find查找删除:xargs 4. find调用-dele ...
- Linux入门-程序开发
Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...
- linux文件编程----系统调用
linux中文件编程可以使用两种方法: 1).linux系统调用 2).C语言库函数 前者依赖于linux系统,后者与操作系统是独立的. 在 linux系统中,所有打开的文件也对应一个数字,这个数字由 ...
- 《嵌入式linux应用程序开发标准教程》笔记——8.进程间通信
, 8.1 概述 linux里使用较多的进程间通信方式: 管道,pipe和fifo,管道pipe没有实体文件,只能用于具有亲缘关系的进程间通信:有名管道 named pipe,也叫fifo,还允许无亲 ...
- 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发
进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...
- Linux下重要日志文件及查看方式
http://os.51cto.com/art/201108/282184_all.htm 1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...
随机推荐
- databasefactory.createdatabase Web.config 配置关键点提醒
<configuration> <configSections> <section name="dataConfiguration" type ...
- Python开发【第七章】:Python面向对象进阶
1.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类 ...
- iOS一些系统事件的生命周期
1.- (void)applicationWillResignActive:(UIApplication *)application 说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息 ...
- UIWebView通过JS语句获取网页(html)的某些数值
//To get string from the title of the HTML page: NSString *currentURL = [theWebView stringByEvaluati ...
- CSS display 属性
实例 使段落生出行内框: p.inline { display:inline; } 所有主流浏览器都支持 display 属性. 注释:如果规定了 !DOCTYPE,则 Internet Explor ...
- .NET学习记录3
一.ASP.NET ISAPI与IIS IIS如何监听来自外界的http request ,如何根据ISAPI Extension Maping 将对于不同的resource的请求分发给不同的ISAP ...
- IOC 控制反转模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一个 ...
- 14. 星际争霸之php设计模式--状态模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Objective-C语言内存管理
• Objective-C为每个对象提供一个内部计数器,这个计数器跟踪对象的引用次数.所有类都继承自 NSObject 的对象retain和release方法. 如果使用了new.alloc或copy ...
- viewpager实现酷炫侧滑demo
晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了. 不过还是有槽点.我是无意中才发现可以左右滑动的.这...你不告诉我,我怎么知道左右可以滑. https://gith ...