1.Linux标准IO编程

1.1Linux系统调用和用户编程接口

1.1.1系统调用

用户程序向操作系统提出请求的接口。不同的系统提供的系统调用接口各不相同。继承UNIX系统调用中最基本和最有用的部分。

调用按照功能分:进程控制、进程间通讯、文件系统控制、存储管理、网络管理、套接字控制、用户管理。

1.1.2用户编程接口

实际开发使用的是用户编程接口:

(1)、系统调用接口功能非常简单,无法满足程序的需求。(2)、不同操作系统的系统调用接口不兼容,程序移植时工作量大。

1.2Linux标准编程接口

1.2.1标准IO的由来:指的是ANSI C中定义的用于IO操作的一系列函数。

(1)、具有更好的移植性;(2)、可以减少系统调用的次数,提高系统效率(在用户空间创建缓冲区)。

1.2.2流的含义

缓冲类型:(1)、全缓冲;(2)、行缓冲;(3)、无缓冲;

1.3标准IO编程

1.3.1流的打开:

FILE *fopen(const char *path, const char *mode);

1.3.2流的关闭:

int fclose(FILE *fp);

1.3.3错误处理:

void perror(const char *s);

char *strerror(int errnum);

1.3.4流的读写:

1.按字符(字节)输入/输出

字符输入:

int fgetc(FILE *stream);

int getc(FILE *stream);

int getchar(void);

字符输出:

int fputc(int c, FILE *stream);

int putc(int c, FILE *stream);

int putchar(int c);

2.按行输入/输出

行输入:

char *fgets(char *s, int size, FILE *stream);

char *gets(char *s);

行输出:

int fputs(const char *s, FILE *stream);

int puts(const char *s);

3.以指定大小为单位读写文件

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

1.3.5流的定位

int fseek(FILE *stream, long offset, int whence);

whence:SEEK_SET,  SEEK_CUR,  or  SEEK_END:文件起始、当前、末尾读写位置;

long ftell(FILE *stream);

1.3.6格式化输入与输出

输入:

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

int sscanf(const char *str, const char *format, ...);

输出:

        int printf(const char *format, ...);

  int fprintf(FILE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);

1.4实验内容

1.4.1文件的复制

1.实验目的:通过实现文件的复制,掌握流的基本操作。

2.实验内容:在程序中分别打开源文件和目标文件。循环从源文件中读取内容并写入目标文件。

3.实验步骤:(1)、检查参数→打开源文件→打开目标文件→循环读写文件→关闭文件。

(2)、编写代码。

1.4.2循环记录系统时间

1.实验目的:获取系统时间→在程序中延时→流的格式化输出。

2.实验内容:程序中每隔一秒读取一次系统时间并写入文件。

3.实验步骤:(1)、设计流程:打开文件→获取系统时间→写入文件→延时1s→返回第二步(获取系统时间)。

(2)、编写代码。

时间: 2024-11-03 21:29:16

1.Linux标准IO编程的相关文章

linux标准io的copy

---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) { printf("use:mycp file1 file2\n"); return -1; } FILE *src=fopen(argv[1],"r");//打开源文件 if(src==NULL) { printf("no file!\n");

嵌入式 Linux系统编程(三)——标准IO库

嵌入式 Linux系统编程(三)--标准IO库 与文件IO函数相类似,标准IO库中提供的是fopen.fclose.fread.fwrite等面向流对象的IO函数,这些函数在实现时本身就要调用linux的文件IO这些系统调用. 一.标准IO库函数的缓冲机制 由于IO设备的访问速度与CPU的速度相差好几个数量级,为了协调IO设备与CPU的速度的不匹配,对于块设备,内核使用了页高速缓存,即数据会先被拷贝到操作系统内核的页缓存区中,然后才会从操作系统内核的缓存区拷贝到应用程序的地址空间. 当应用程序尝

Linux学习之标准IO 管道 033_7

默认输入为键盘,标准输出为显示器,错误输出为显示器 把标准输出和错误输出重定向到文件: command operator filename operators: >:标准输出重定向 :把ls -R的输出重定向到文件 2>:错误输出重定向 &>:将正确和错误的输出都重定向 同时将正确和错误信息分别导入到不同文件: 以上默认覆盖,如果在文件末尾添加则用>>s 把错误输出重定向到空设备,也就是忽略错误信息 管道: 将前面一条命令执行的结果作为后面一条命令的输入 如: ls

Linux 下IO端口编程访问

以前写的一篇笔记,偶尔翻出来了,放在这里做个纪念 Linux 下IO端口编程访问 这里记录的方法是在用户态访问IO端口,不涉及驱动程序的编写. 首先要包含头文件 /usr/include/asm/io.h ioperm() 在 unistd.h 中声明.用来打开对IO端口的访问权限,要求程序执行时必须有root 权限.只可以打开0x00到0x3ff 这一地址段的IO端口. ioperm( from, num, turn_on) 比如: #include<asm/io.h> #include&l

Linux基础管理—— &quot; 标准IO及重定向及管道 &quot;

1.标准输入和输出 一般来说程序是由指令+数据组成:那么就不可避免的要读入和输出数据,即input和output. 打开的文件都有一个fd: file descriptor (文件描述符),可以在/proc/$$/fd中查看当前终端打开的文件数,一个文件描述符就是一个打开的文件. [[email protected] ~]#ll /proc/$$/fd total 0 lrwx------. 1 root root 64 Nov 26 12:27 0 -> /dev/pts/5 lrwx----

UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流

? 1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. 为了应对这种场景,标准IO库提供了fread和fwrite函数. 函数声明: #include <stdio.h> size_t fread(void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp); size_t fw

Unix高级编程之标准IO

c标准io---带缓存的io 优势: 带缓存(合并系统调用)缺点: 实时性低缓存的类型: 行缓存:stdin stdout(缓存区是有大小) 全缓存:文件 无缓存:stderr 1.流 打开文件的标识 2.FILE类型 结构体类型: 文件描述符 缓存区的地址 缓存的大小 出错标识 3.流的打开 fopen(3); errno全局变量 定义的宏: /usr/include/asm-generic/errno-base.h /usr/include/asm-generic/errno.h strer

《UNIX环境高级编程》--5 标准IO库

标准IO库 流和 FILE对象 标准IO库与文件IO区别: 标准IO库处理很多细节,如缓冲区分片.以优化的块长度执行IO等. 文件IO函数都是围绕文件描述符进行.首先打开一个文件,返回一个文件描述符:后续的文件IO操作都使用该文件描述符 标准IO库是围绕流进行的.当用标准IO库打开或者创建一个文件时,就有一个内建的流与之相关联 标准IO库的函数很多都是以 f开头,如fopen.fclose 对于ASCII字符集,一个字符用一个字节表示:对于国际字符集,一个字符可以用多个字节表示. 标准IO文件流

第一天20150829:标准IO 和 系统IO -----stdio and sysio

IO 的实现包括两种实现: 1.stdio标准IO 2.sysio系统IO IO的两种实现方式正常都可以使用.但是,在使用的过程中优先使用stdio标准IO. 首先要了解这两种实现的原理: 1.sysio系统IO:我们作为USER 要与内核对话,那么系统为我们提供了一个sysio,可以直接对话KERNAL. 那么问题就产生了:如果USER使用的平台环境不一样(有的人有linux,有的人用windows),那么由于KERNAL不一样,那么提供给USER的sysio也会不一样 2.所以引申出来一个标