系统调用方式文件编程

一、文件描述符

  在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. C# 毕业证书打印《四》

    数据存储,读取控件在Panel中的位置,将控件的位置保存到xml文件中. /// <summary> /// 将当前格式写入xml /// </summary> /// < ...

  2. java获取对象属性类型、属性名称、属性值

    /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String ...

  3. FastReport调用Delphi中的自定义函数(人民币大写金额)mtm

    1. 在 FormCreate 中向FastReprot添加函数 (fPrint)窗口 procedure TfPrint.FormCreate(Sender: TObject); frxReport ...

  4. 和我一起学python,控制语句 (life is short ,we need python)

    控制语句 if/elif/else if语句和一般编程语言一样,条件为true 执行 如: if true : print 'true'         <----if.else下对齐,要使用相 ...

  5. GNOME启动时激活NumLock(小键盘数字锁定)

    首先下载numlockx官方源提供的安装包,解压后进入目录运行终端,切换到root账户执行以下命令: python ./setup.py 然后依次点击GNOME菜单项上的“系统->首选项-> ...

  6. Python2.7<-------->Python3.x

    版本差异 from __future__   Python2.7 Python3.x 除法 / // Unicode u''                                       ...

  7. 【转】Java-----jar反编译修改重新打包

    原文链接:http://blog.csdn.net/hekewangzi/article/details/44676797 一.使用反编译工具JD-GUI(JD-GUI相关操作见Java-----反编 ...

  8. code vs1436 孪生素数 2(数论+素数的判定)

    1436 孪生素数 2  时间限制: 2 s  空间限制: 1000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 Description 如m=100,n=6 则 ...

  9. window.location.href url含中文服务器收到乱码问题解决

    中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...

  10. EF的各种删除方法

    //2.1检查 id 是否存在 //2.2执行删除 Models.Student stu = new Models.Student() { Id = id }; //db.Students.Attac ...