系统调用方式文件编程

一、文件描述符

  在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. ubuntu14.04 server 安装vmware worktation 12

    0) Do the basic system installation of Ubuntu 14.04 LTS (Server or Desktop) 1) wget the installer wg ...

  2. 【K8s】Kubernetes 最近正在看的资料

    中国移动Kubernetes多集群统一管理实践:  http://www.tuicool.com/articles/FrqQrqI#c-22517 一种新的进入容器的方式: WebSocket + D ...

  3. sharepoint 2010 页面刷新时滚动条位置保持不变 Controlling scrollbar position on postback

    sharepoint 2010 页面刷新时滚动条位置保持不变 Controlling scrollbar position on postback在sharepoint 2010中,如果当前页面的篇幅 ...

  4. POJ 1002

    #include <stdio.h> #include <string.h> #include <stdlib.h> struct In{ int a; ]; }p ...

  5. 关于 strcpy 段错误

    int main(){ char * s = "hello,world" ; char *t = "happy"; strcpy(s,t) ; // error ...

  6. Light OJ 1032

    数位dp,许多数位dp需要统计某种模式(子串)出现的数量,这种题通常需要在递归参数中加入高位已经出现过的模式的数量. #include <cstdio> #include <cstr ...

  7. Windows下用python编写简单GUI程序的方法

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...

  8. Zookeeper WINDOWS 安装配置

    下载:zookeeper:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 解压zo ...

  9. linux下mysql开启关和重启

    开启: /etc/init.d/mysql start关闭: /etc/init.d/mysql stop重启: /etc/init.d/mysql restart 查看字符集show variabl ...

  10. (转)Delphi工程文件说明

    1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...