系统调用方式文件编程

一、文件描述符

  在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. Openstack Neutron 允许VM流量转发

    neutron port-update <port-id> --port-security-enabled=False --no-security-groups

  2. Sort Transformed Array

    Given a sorted array of integers nums and integer values a, b and c. Apply a function of the form f( ...

  3. C++ 代码头注释模板

    /********************************************************************************* *Copyright(C),You ...

  4. Spring MVC配置静态资源的正常访问

    SpringMVC如果过滤器过滤范围配置了/或者/*,那么框架会过滤所有请求,包括自己写的请求和静态资源请求,这样静态资源就不能正常加载,包括js文件.css文件.图片资源访问的时候都会出现404页面 ...

  5. 内存管理_深入剖析volatile关键字

    四.深入剖析volatile关键字 在前面讲述了很多东西,其实都是为讲述volatile关键字作铺垫,那么接下来我们就进入主题. 1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量. ...

  6. Java for LeetCode 215 Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  7. 修改UINavigationController返回按钮颜色

    系统默认颜色是蓝色的 视觉效果非常难看 在push进的ViewController中写 //修改UINavigationController的文字颜色 self.navigationControlle ...

  8. 【数据结构】book3_3 表达式求值

    #include<iostream> #include <stdlib.h> using namespace std; typedef int Status; ; ; ; ; ...

  9. 【mysql】Blob类型

    来源:http://qgyang.blog.sohu.com/115847378.html 一般在需要存储较大数据时使用Bolb MySql的Bolb四种类型 MySQL中,BLOB是一个二进制大型对 ...

  10. python if __name__ == '__main__'解析

    废话不多说,正题: python中所有的模块都有一个内置属性 __name__,一个模块的 __name__ 的值取决于如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为 ...