Linux系统编程_2_文件I/O

这里说的的文件I/O指的是不带缓存的;

1.关于带缓存的IO操作和不带缓存的IO操作,参见另一篇文章:

带缓存IO和不带缓存IO详解

Linux中的文件IO(不带缓存的IO)通常用的有以下几个:

open    read    write    lseek   close

2.open的参数

int fd(filename, mode);

mode 通常可以是O_RDONLY(只读)  O_WRONLY(只写)  O_RDWR(读写) 必须指定且只能指定一个!

其他的可供选择,可通过或运算添加:O_APPEND  O_CREAT  O_EXCL   O_TRUNC

3.read与write在读取网络数据时,可能由于网络的缓冲机制等造成实际读到的数据小于应读数据。

4.用lseek实现获取文件大小的功能:

1 #include <stdio.h>
2 #include <unistd.h>
3 #include <fcntl.h>
4 #include <stdlib.h>
5
6 int main(int argc, char ** argv)
7 {
8     off_t size;
9     int nFd;
10
11     if(argc < 2)
12     {
13         printf("Usage: ./size xxx\n");
14         exit(-1);
15     }
16
17     nFd = open(argv[1], O_RDONLY);
 18     if(-1 == nFd)
19     {
20         perror("Open file error");
21         exit(-1);
22     }
23     size = lseek(nFd, 0, SEEK_END);
24     printf("The file size is : %d\n", size);
25
26     return 0;
27 }

5.dup与dup2函数,都用来复制一个现存的文件描述符

int dup(int fd);

int dup2(int fd1,int fd2);//若 fd2已经打开,则先关闭

6.sync  fsync  fdatasync函数都可以用来将缓冲区中的数据刷新到物理磁盘

sync函数并不等待实际的写磁盘操作结束后返回。

fsync函数等待写磁盘操作结束后返回,可以用于数据库这样的应用程序。

7.fcntl函数——可以改变已经打开的我文件的性质

#include <fcntl.h>

int fcntl(int fd, int cmd, int arg);

fcntl函数有五种功能:

1.复制一个现有的文件描述符(cmd=F_DUPFD)

2.获取/设置文件描述符(cmd=F_GETFD / cmd=F_SETFD

3.获取/设置文件状态(cmd=F_GETFL / cmd =F_SETFL)

4.获取/设置异步IO所有权(cmd=F_GETOWN / cmd=F_SETOWN)

5.获取/设置文件记录锁(cmd=F_GETLK / cmd=F_SETLK/F_SETLKW)

Linux系统编程_2_文件I/O

时间: 2024-10-27 07:09:16

Linux系统编程_2_文件I/O的相关文章

【Linux系统编程】文件IO操作

文件描述符在 Linux 的世界里,一切设备皆文件.我们可以系统调用中 I/O 的函数(I:input,输入:O:output,输出),对文件进行相应的操作(?open().close().write() .read() 等). 打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件.这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整数,是文件的标识,操作这个文件描述符相当于操作这个描述符所指定的文件. 程序运行起来后(每个进程)都有一张文件描述符的

linux系统编程之文件IO

1.打开文件的函数open,第一个参数表示文件路径名,第二个为打开标记,第三个为文件权限 代码: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> int main() { int fd; fd = open("testopen1",O_CREAT,0777); printf("fd = %d\n",fd)

Linux系统编程_1_文件夹读取(实现简单ls命令)

闲来无事.随便写写,实现简单的ls命令: | 1 #include <stdio.h> | 2 #include <stdlib.h> | 3 #include <dirent.h> | 4 #include <string.h> | 5 | 6 int main(int argc, char **argv) | 7 { | 8 DIR *pDir; | 9 struct dirent *stDir; | 10 int flag = 0; | 11 | 12

linux系统编程视频 百度网盘下载

本帖最后由 雇佣兵333 于 2015-5-19 16:15 编辑 c教程目录: Linux开发快速入门培训gcc快速入门Makefile快速入门GDB快速入门 Linux系统编程之文件篇01认识计算机系统(上)计算机系统组成计算机系统硬件组成总线I/O设备内存处理器(运算器+控制器) 02认识计算机系统(下)什么是操作系统Linux内核模块操作系统管理硬件操作系统三个基本抽象进程上下文切换进程虚地址空间虚拟文件系统(VFS) 03系统编程介绍系统编程与应用编程系统资源系统调用系统调用与C库关系

Linux系统编程之访问文件夹及其文件属性

1. 文件夹操作:opendir, readdir, closedir 2. 文件属性:lstat 3. 实现功能:获取指定文件夹下所有的文件(使用递归),因此就能计算所有文件大小之类的啦... 代码示例如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <sys/stat

嵌入式 Linux系统编程(一)——文件IO

嵌入式 Linux系统编程(一)--文件IO 一.文件IO概念 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件IO操作.不带缓存的属于直接调用系统调用(system call)的方式,高效完成文件输入输出.它以文件标识符(整型)作为文件唯一性的判断依据.这种操作不是ASCI标准的,与系统有关,移植有一定的问题.而带缓存的是在不带缓存的基础之上封装了一层,维护了一个输入输出缓冲区,使之能跨OS,成为ASCI标准,称为标准IO库.不带缓存的方式频繁进行用户态 和内核

嵌入式 Linux系统编程(二)——文件描述符控制函数fcntl

嵌入式 Linux系统编程(二)--文件描述符控制函数fcntl 由于fcntl函数实在过于灵活和复杂,本文将fcntl函数从文件IO中单独列出来,便于详细解读.函数原型如下: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); fcntl函数用于控制操作文件描述符fd,对文件描述符的控制操作由cmd控制命令来控制,arg参数为可选参数,是否需要arg参数取决于控制命令

嵌入式 Linux系统编程(五)——目录文件函数

嵌入式 Linux系统编程(五)--目录文件函数 Linux中目录也是文件,目录操作函数为标准IO库函数.主要函数如下: #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int fd); 成功返回一个指向目录流的指针,失败返回NULL,并且设置errno全局变量. #include <dirent.h> struct dirent *rea

Linux系统编程-setitimer函数

功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); 参数含义: 1.which参数用来设置定时器类型,可选的值为 (1)ITIMER_REAL : 设置定时器以系统真实所花费的时间来计时,运行指定时间后发送SIGALRM信号. (