3.1 Linux中的文件IO (13、14节)
来源:互联网 发布:知已知彼百战不殆 编辑:程序博客网 时间:2024/06/06 01:16
3.1.13.fcntl函数介绍
3.1.13.1、fcntl的原型和作用
(1)fcntl函数是一个多功能文件管理的工具箱,接收2个参数+1个变参。第一个参数是fd表示要操作哪个文件,第二个参数是cmd表示要进行哪个命令操作。变参是用来传递参数的,要配合cmd来使用。(2)cmd的样子类似于F_XXX,不同的cmd具有不同的功能。学习时没必要去把所有的cmd的含义都弄清楚(也记不住),只需要弄明白一个作为案例,搞清楚它怎么看怎么用就行了,其他的是类似的。其他的当我们在使用中碰到了一个fcntl的不认识的cmd时再去查man手册即可。
3.1.13.2、fcntl的常用cmd
(1)F_DUPFD这个cmd的作用是复制文件描述符(作用类似于dup和dup2),这个命令的功能是从可用的fd数字列表中找一个比arg大或者和arg一样大的数字作为oldfd的一个复制的fd,和dup2有点像但是不同。dup2返回的就是我们指定的那个newfd否则就会出错,但是F_DUPFD命令返回的是>=arg的最小的那一个数字。3.1.13.3、使用fcntl模拟dup2
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#define FILENAME"1.txt"int main(void){int fd1 = -1, fd2 = -1;fd1 = open(FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0644);if (fd1 < 0){perror("open");return -1;}printf("fd1 = %d.\n", fd1);close(1);fd2 = fcntl(fd1, F_DUPFD, 0);printf("fd2 = %d.\n", fd2);while (1){write(fd1, "aa", 2);sleep(1);write(fd2, "bb", 2);}close(fd1);return -1;}
3.1.14.标准IO库介绍
3.1.14.1、标准IO和文件IO有什么区别
(1)看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API(2)C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API要更加好用一些。
(3)库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。所以C库函数具有可移植性而API不具有可移植性。
(4)性能上和易用性上看,C库函数一般要好一些。譬如IO,文件IO是不带缓存的,而标准IO是带缓存的,因此标准IO比文件IO性能要更高。
3.1.14.2、常用标准IO函数介绍
(1)常见的标准IO库函数有:fopen、fclose、fwrite、fread、ffulsh、fseek3.1.14.3、一个简单的标准IO读写文件实例
#include <stdio.h>// standard input output#include <stdlib.h>#include <string.h>#define FILENAME"1.txt"int main(void){FILE *fp = NULL;size_t len = -1;//int array[10] = {1, 2, 3, 4, 5};char buf[100] = {0};fp = fopen(FILENAME, "r+");if (NULL == fp){perror("fopen");exit(-1);}printf("fopen success. fp = %p.\n", fp);// 在这里去读写文件memset(buf, 0, sizeof(buf));len = fread(buf, 1, 10, fp);printf("len = %d.\n", len);printf("buf is: [%s].\n", buf);#if 0fp = fopen(FILENAME, "w+");if (NULL == fp){perror("fopen");exit(-1);}printf("fopen success. fp = %p.\n", fp);// 在这里去读写文件//len = fwrite("abcde", 1, 5, fp);//len = fwrite(array, sizeof(int), sizeof(array)/sizeof(array[0]), fp);len = fwrite(array, 4, 10, fp);printf("len = %d.\n", len);#endiffclose(fp);return 0;}
阅读全文
0 0
- 3.1 Linux中的文件IO (13、14节)
- 3.1 Linux中的文件IO (3节)
- 3.1 Linux中的文件IO (4节)
- Linux中的文件IO
- 3.1 Linux中的文件IO (1、2节)
- 3.1 Linux中的文件IO (5、6节)
- 3.1 Linux中的文件IO (7、8节)
- 3.1 Linux中的文件IO (9、10节)
- 3.1 Linux中的文件IO (11、12节)
- linux应用编程和网络编程-3.1.linux中的文件IO
- C中的文件IO
- Unix中的文件IO
- Linux中的IO使用方法
- Linux中的IO模型
- Linux中的IO模型
- Linux 文件IO理解
- 漫谈linux文件IO
- 漫谈linux文件IO
- together进度报告9
- 世界首个合法授权:双人飞行汽车GyroDrive已上路
- 网络层协议IP/ICMP/DHCP/ARP/TCP数据的捕获与分析
- 传输层的复用和解复用
- 【LeetCode64 Minimum Path Sum】动态规划计算路径
- 3.1 Linux中的文件IO (13、14节)
- Spring(1-1、基于xml装配Bean)
- C8051F没有无法进main函数的解决办法之一
- 解决IIS+PHP出现的“500
- 7. Reverse Integer
- Java基础教程18-方法传参和返回值
- Lecture 2: Supervised machine learning
- http协议无状态中的 "状态" 到底指的是什么?!
- Ancient Cipher