系统调用方式文件编程

一、文件描述符

  在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符。

二、函数学习

2.1打开文件  open

2.1.2 函数原形

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

  2).int open(const char *pathname,int flags,mode_t mode);

2.1.3 函数功能

  打开或者创建一个文件

2.1.4 所属头文件

  <sys/types.h>   <sys/stat.h>   <fcntl.h>

2.1.5 返回值

  成功:文件文件描述符       失败:-1

2.1.6 参数说明

pathname:要打开的文件名(包含路径)

flags:文件打开的标志(参数含义如表格)

  O_APPEND:已追加的方式打开文件

  O_CREAT:如果要打开的文件不存在,创建该文件

mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件访问权限(标志含义如下)

2.2 创建文件   creat

2.2.1 函数原形

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

2.2.2 函数功能

  创建一个文件并且以只写方式打开

2.2.3 所属头文件

  <sys/types.h>   <sys/stat.h>   <fcntl.h>

2.2.4 返回值

  成功:文件描述符     失败:-1

2.2.5 参数说明

  Pathname:创建的文件名(含路径)

  mode:创建的文件的读写权限

2.3读文件read

2.3.1 函数原形

  ssize_t (int fd,void *buf,size_t count);

2.3.2函数功能

  从一个打开的文件中读取数据

2.3.3 所属头文件

  <unistd.h>

2.3.4 返回值

  成功:返回读取的字节数

失败:-1

2.3.5 参数说明

  fd:要读取数据的文件描述符

  count:希望读取的字节数

  buf:读取到的数据存放到buf指向的空间

2.4 写文件  write

2.4.1.函数原形

  ssize_t write(int fd,void *buf,size_t count);

2.4.2 函数功能

  向一个打开的文件写入数据

2.4.3所属头文件

  <unistd.h>

2.4.4返回值

  成功:返回写入到文件的字节数

失败:-1

2.4.5参数说明

  fd:要写入的文件描述符

  buf:从buf中取数据

  count:要写入的字节数

2.5定位文件lseek

2.5.1函数原形

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

2.5.2函数功能

  lseek()将文件读写指针相对 whence 移动 offset 个字节

2.5.3所属头文件

  <unistd.h>  <sys/types.h>

2.5.4返回值

  成功:返回距离文件头的偏移量

  失败:-1

2.5.5参数说明

  fd:要调整的文件

  offset:偏移的地址数目

    offset 取负值,例如下述调用将文件指针相对当前位置向前移动 5 个字节。

     lseek(fd, -5, SEEK_CUR);

     由于 l seek 函数的返回值为文件指针相对于文件头的位置, 因此下列调用的返回值就是文件的长度:

     lseek(fd, 0, SEEK_END);

  whence:表示的是文件指针从什么地址移动

    SEEK_SET:相对文件开头。
    SEEK_CUR:相对文件读写指针的当前位置。
    SEEK_END:相对文件末尾。

2.6复制文件描述符dup

2.6.1函数原形

  int dup(int oldfd);

2.6.2 函数功能

  复制一个文件描述符

2.6.3 所属头文件

  <unistd.h>

2.6.4返回值

  成功:返回新的文件描述符

失败:-1

2.6.5参数说明

  oldfd:待复制的老文件描述符

实例:

    #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#define LENGTH 100
main()
{
int fd, len;
char str[LENGTH]; fd = open("hello.txt",O_CREAT |O_RDWR,S_IRUSR |S_IWUSR); /*
12 创建并打开文件 */
if (fd)
{
write(fd, "Hello World", strlen("Hello World")); /*写入字符串 */ close(fd);
} fd = open("hello.txt",O_RDWR);
len = read(fd, str, LENGTH); /* 读取文件内容 */
str[len] = '\0';
printf("%s\n", str);
close(fd);
}

系统调用方式文件编程,王明学learn的更多相关文章

  1. 信号通讯编程,王明学learn

    信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...

  2. 时间编程,王明学learn

    时间编程 一.时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT) Calend ...

  3. 系统调用方式文件编程-open

    通过Linux系统调用函数编写应用程序,该应用程序实现文件的复制功能 文件描述符--在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配. 1.打开文件--open 头文件:#inc ...

  4. 库函数系统调用文件方式,王明学learn

    库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows.Linux还是其他的操作系统中,都是使用这些函数.使用库函数进行程序设计可提高程序的可移植性. 对于 ...

  5. linux内核的组成,王明学learn

    linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...

  6. linux设备驱动概述,王明学learn

    linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...

  7. 静态/动态函数库设计,王明学learn

    静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...

  8. ARM伪指令,王明学learn

    ARM伪指令 在ARM汇编语言程序中里,有一些特殊指令助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作.伪指令在元程序中的作用是为完成汇编 ...

  9. 共享内存同行,王明学learn

    共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...

随机推荐

  1. MVC Return View() 和 Return PartialView()的区别

    分部视图在action中返回一定要用PartialView(),而不要偷懒使用View(),因为,如果你使用View()渲染视图,系统会认为你是一个标准视图,会为你加个默认的母板页(Layout),除 ...

  2. STL 阅读(浅析)

    写的不错,决定那这个看下.看的还是晕. http://luohongcheng.github.io/archives/

  3. RRD

    http://my.oschina.net/u/1458120/blog/208857

  4. 开始学习C++

    这里突然想起来当初学习java和C# 总是会有个demo :  hello  world. 这里我记得我曾经看过一个笑话.说有个程序员,想学习书法,买了笔墨,都准备好了,但是不知道写什么好.最后,他大 ...

  5. 手动fsck修复

    [转自]http://blog.chinaunix.net/uid-26719405-id-3781541.html 由于硬盘常年读写,系统会造成系统文件损坏,导致重启后无法登陆到系统, fsck不仅 ...

  6. frxReport 设计 (mtm)

    ► 设计  frxReport  frxReport 窗体上放一个  [frxReport] 的控件 双击 [frxReport]控件 进入设置模式 frxReport1.ShowReport() 方 ...

  7. 23. javacript高级程序设计-数据存储

    1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...

  8. effective OC2.0 52阅读笔记(四 协议与分类)

    23 通过委托与数据源协议进行对象间通信 总结:委托模式的常规委托模式中,信息从类Class流向受委托者delegate.数据源模式,信息从数据源datasource流向class.数据源和受委托者可 ...

  9. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  10. weblogic重置用户名密码。

    说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 例如我的做测试的域的根目DOMAIN_HOME=D:\bea\user_projects\domains\b ...