LINUX ANSI C库函数FOPEN()的文件流指针结构体访问代码

 1 [root@localhost ccode]# cat ptr_struct_file.c
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 #include <string.h>
 5
 6 #define ptr(CONTENT, MSG) printf(CONTENT":\t%p\n",MSG)
 7
 8 int main(int argc, char *argv[])
 9 {
10     FILE *fp_src, *fp_des;
11     char buffer[10], buffer1[128];
12     int i = 0;
13     if((fp_src = fopen(argv[1], "r+")) == NULL)
14     {
15         perror("open1");
16         exit(EXIT_FAILURE);
17     }
18     if((fp_des = fopen(argv[2], "w+")) == NULL)
19     {
20         perror("open2");
21         exit(EXIT_FAILURE);
22     }
23     setvbuf(fp_src, buffer1, _IOLBF, 128);
24
25     do
26     {
27         ptr("src_IO_read_ptr", fp_src->_IO_read_ptr);
28         ptr("_IO_read_end", fp_src->_IO_read_end);
29         ptr("_IO_read_base", fp_src->_IO_read_base);
30         ptr("src_IO_write_ptr", fp_src->_IO_write_ptr);
31         ptr("_IO_write_base", fp_src->_IO_write_base);
32         ptr("_IO_write_end", fp_src->_IO_write_end);
33         ptr("_IO_buffer_base\t", fp_src->_IO_buf_base);
34         ptr("_IO_buffer_end\t", fp_src->_IO_buf_end);
35         memset(buffer, '\0', 10);
36         i = fread(buffer, 1, 10, fp_src);
37         fwrite(buffer, 1, i, fp_des);
38         printf("i's value is :%d\n", i);
39         ptr("des_IO_read_ptr", fp_des->_IO_read_ptr);
40         ptr("des_IO_write_ptr", fp_des->_IO_write_ptr);
41     }while(i == 10);
42     fclose(fp_src);
43     fclose(fp_des);
44 }

因为不太解决BUFFER方面设置和FWRITE()和FOPEN()的参数,

特意加了I值输出,以便更好领会。。

时间: 2024-10-27 03:42:21

LINUX ANSI C库函数FOPEN()的文件流指针结构体访问代码的相关文章

Linux下合并前缀相同的文件的程序流程及其C代码实现

一.概述 在实际的软件开发项目中,会出现对多个前缀(或后缀)相同的文件进行合并的需求.也就是说,将这些前缀(或后缀)相同的文件中的内容合并到一个文件中.这些文件的来源可能是前一流程中程序生成的文件,也可能是其他模块生成的文件. 例如,我们要将前缀相同(以"Test_"作为前缀)的Test_1.txt和Test_2.txt文件中的内容合并到ResultFile.txt文件中,如果Test_1.txt文件中的内容为: AAAAA Test_2.txt文件中的内容为: BBBBB 那么Res

探析C#文件方式读写结构体

最近一直在研究.Net Micro Framework字体文件(tinyfnt),由于tinyfnt文件头部有一段描述数据,所以很想定义一个结构体,像VC一样直接从文件中读出来,省得用流一个个解析很是麻烦. 没有想到在中竟没有直接的指令,想必设计者认为提供了流和序列化技术,一切问题都可以迎刃而解了. 在中结构体是一个比较复杂的东西,在此之上有很多需要设置的参数,否则用起来就很容易出错.下面是msdn上一段描述,看看也许有助于理解C#语言中的结构体. 通过使用属性可以自定义结构在内存中的布局方式.

SQL Server on Linux的文件和目录结构

问题引入 "鸟儿啊,我记得你写过一篇<SQLServer On Linux Package List on CentOS>的文章,从这篇文章,我们很清楚的知道了SQL Server on Linux包含有哪些必要的包.那么,我们怎么知道SQL Server on Linux到底包含哪些重要的文件和目录结构呢?他们的作用是什么?". "的确,当我们在排错或者需要改变MSSQL Server on Linux配置的时候,我们需要对SQL Server的各个工作目录和文

.NET中的IO操作之文件流用法分析_实用技巧

本文实例讲述了.NET中的IO操作之文件流用法.分享给大家供大家参考.具体分析如下: 读操作 复制代码 代码如下: //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不会直接等于文件大小的.这里只有读,所以就这么干了. byte[] bytes =new byte[fsRead.Length]; //3.开始读取, 返回值是读取到的长度. int r =fsRead.

结构体存入文件并且取出

首先定义结构体 struct student_type { char name[10]; int num; int age; } stud; 将结构体写入 代码 void save() { FILE *fp; int i; if((fp=fopen("stu_list","a+"))==NULL) { printf("canot open the file."); exit(0); } if(fwrite(&stud,sizeof(str

c++调用c库函数-c/c++,使用fopen()打开文件

问题描述 c/c++,使用fopen()打开文件 用fopen()打开文件,第二个参数"rb+".当文件不存在时,程序直接崩溃了,try-catch捕捉不到.有没有什么办法,当文件不存在时,程序可以自己创建一个?(用"wb+"当参数,无论文件存在不存在,都会新建一个文件,只是原来的文件会被覆盖掉) 解决方案 不会崩溃吧,你这样写: if( (fp=fopen("filename","r+b")) == NULL ) { pri

Linux C中库函数与系统调用的区别详细解析_unix linux

从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务,函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的.系统调用是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感的软件资源等. 函数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成.因此我们可以将函数库的函数当成应用程序设计人员与系统调用程序之间的一个中间层,通过这个中间层,我们可以用一致的接口来安全的调用系统调用.这样程序员可以只要写一次代码就能够在不

C语言读取文件流的相关函数用法简介_C 语言

C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include <stdio.h> 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

用PHP在Linux上读取输入并进行文件操作

Perl作为Linux系统命令行脚本的首选解释语言的日子一去不复返了.今天,我们有了更多的选择,包括Python.Ruby和PHP.如果你已经为网站编写PHP代码,并熟谙这种语言,那么你会发现,在命令行使用PHP的速度之快,效果之好令人惊奇. 在脚本中,任何脚本语言的一个最大功用是对文件进行操作并获取用户输入.PHP处理这些丝毫不比其它任何脚本语言逊色. 例如,利用PHP在脚本执行期间处理读取用户提供输入,使用: #!/usr/bin/php<?phpfunction read_input(){