系统调用方式文件编程

一、文件描述符

  在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. PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)

    /*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...

  2. 安装完eos出的问题

    Failed to load JavaHL Library.These are the errors that were encountered:no msvcp100 in java.library ...

  3. 【Docker】docker /var/lib/docker/aufs/mnt 目录满了,全是垃圾数据,咋搞?

    命令: #!/bin/bash # 推荐方式 docker volume ls -f dangling=true | awk '{ print $2 }' | xargs docker volume ...

  4. jQuery之元素筛选

      1.eq()  筛选指定索引号的元素2.first() 筛选出第一个匹配的元素3.last() 筛选出最后一个匹配的元素4.hasClass() 检查匹配的元素是否含有指定的类5.filter() ...

  5. ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!

    通过ansible执行远程命令时报如下异常: Error: ansible requires the stdlib json or simplejson module, neither was fou ...

  6. DP:教授逻辑学问题

    http://www.zhihu.com/question/23999095#answer-12373156问题来自知乎 2015-08-17 问题描述: 一个教授逻辑学的教授,有三个学生,而且三个学 ...

  7. 【leetcode】Spiral Matrix II (middle)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  8. 如何获得images.xcassets 中图片的路径?

    UIImage加载图片的方式以及Images.xcassets对于加载方法的影响 重点: Images.xcassets中的图片资源只能通过imageNamed:方法加载,通过NSBundle的pat ...

  9. 点击按钮出现60秒倒计时js代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. iOS学习资源个人整理

    1208更新: http://www.tuyiyi.com                                    图翼网 https://github.com/Alamofire/Al ...