LINUX读写文件
body, table{font-family: 微软雅黑; font-size: 10pt}
            table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
            th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
            td{border: 1px solid gray; padding: 4px;}
            tr:nth-child(2n){background-color: #f8f8f8;}
| 
 读写文件
                             
读写文件的函数原型为:
                             
#include <unistd.h>
                             
ssize_t read(int fd, void *buf, size_t count);    //文件描述词  缓冲区  长度
                             
ssize_t write(int fd, const void *buf, size_t count);
                             
off_t lseek(int fd, off_t offset, int whence);    //用法和fseek一样,只不过第一个形参传递的是fd
                             
对于 read 和 write 函数,出错返回-1,读取完了之后,返回0, 其他情况返回读写的个数。
                             
 | 
| //rwfile.c
 #include<stdio.h>
                             
#include<stdlib.h>
                             
#include<unistd.h>
                             
#include<sys/types.h>
                             
#include<sys/stat.h>
                             
#include<string.h>
                             
#include<fcntl.h>
                             
int main(int argc,char **argv)
                             
{
                             
        if( 3!=argc )
                             
        {
                             
                fputs("error args\n",stderr);
                             
                return -1;
                             
        }
                             
        char buf[128]="hello world\n";
                             
        int fdw = open(argv[1],O_CREAT|O_WRONLY,0666);
                             
        if( -1==fdw )
                             
        {
                             
                fputs("error open\n",stderr); //perror(open);
                             
                return -1;
                             
        }
                             
        printf("fdw =%d\n",fdw);
                             
        int ret = write(fdw,buf,strlen(buf)); //sizeof(buf)没字符的地方会写入其他字符
                             
        if( 0>=ret )
                             
        {
                             
                perror("write");
                             
                return -1;
                             
        }
                             
        printf("write ret=%d\n",ret);
                             
        int fdr = open(argv[2],O_CREAT|O_RDONLY,0666);
                             
        if( -1==fdr )
                             
        {
                             
                fputs("error open\n",stderr);  //perror(open);
                             
                return -1;
                             
        }
                             
        printf("fdr =%d\n",fdr);
                             
        bzero(buf,0);
                             
        ret = read(fdr,buf,sizeof(buf));
                             
        printf("read ret=%d\n",ret);
                             
        close(fdw);
                             
        close(fdr);
                             
}
                             
 | 
//如果后面不从新的文件中读取数据,那么 fdr 就是3。  | 
O_APPEND 不管光标在哪 都在文件末尾添加
*******为了每次少写头文件,可以vim head.h 里面存放所有要用到的头文件,最后在.c文件中引用,系统会自己去找头文件;vim func.h 存放头文件 vim main.c 中 #include "func.h" 编译.h自动找
宏定义: 标准输入描述符, 标准输出, 标准错误输出
          STDIN_FILENO  0,STDOUT_FILENO
1,STDERR_FILENO 2
write(STDOUT_FILENO,"error args\n",11); 等价于
printf("error args\n");
| func.h | rw_struct.c | 
| 
 #include<unistd.h>
                                     
#include<sys/types.h>
                                     
#include<sys/stat.h>
                                     
#include<string.h>
                                     
#include<fcntl.h>
                                     
#include<strings.h>
                                     
#include<stdio.h>
                                     
//在文件里面写入结构体,能正常写入,但是查看是乱码 fwrite()能够正常写入
                                     
 | 
 #include"head.h"
                                 
typedef struct student
                                 
{
                                 
        int num;
                                 
        char name[20];
                                 
        float score;
                                 
}stu,pstu;
                                 
int main(int argc, char **argv)
                                 
{
                                 
        //stu s[2]={{100,"meihao",89.23},{101,"xiaomei",34.23}};
                                 
        stu s[2]={100,"meihao",89.23,101,"xiaomei",34.23};
                                 
        printf("%5d %10s %5.2f\n",s[0].num,s[0].name,s[0].score);
                                 
        printf("%5d %10s %5.2f\n",s[1].num,s[1].name,s[1].score);
                                 
        int fdw = open(argv[1],O_RDWR|O_CREAT,0666);
                                 
        write(fdw,&s[1],sizeof(stu));
                                 
        lseek(fdw,0,SEEK_SET);
                                 
        stu tmp;
                                 
        int ret = read(fdw,&tmp,sizeof(stu));
                                 
        printf("%5d %10s %5.2f\n",tmp.num,tmp.name,tmp.score);
                                 
        close(fdw);
                                 
        return 0;
                                 
}
                                  | 
| 
 标准输入输出文件描述符(区别于文件指针)
                             
与标准的输入输出流对应,在更底层的实现是用标准输入、标准输出、标准错误文件描述符表示的。它们分别用STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO三个宏表示,值分别是0、1、2三个整型数字。
                             
标准输入文件描述符         STDIN_FILENO         0
                             
标准输出文件描述符         STDOUT_FILENO        1
                             
标准错误输出文件描述符     STDERR_FILENO        2
                             
 | 
 #include <stdio.h>
                             
#include <unistd.h>
                             
#include <string.h>
                             
int main()
                             
{
                             
    char szBuf[32],szBuf2[50];
                             
    printf("Input string:");
                             
    fflush(stdout);   //要刷新标准输出流,才可以立即在屏幕上显示”Input  string”
                             
//fflush用于linux中的时候,只对fflush(stdout)有效。
                             
    int iRet = read(STDIN_FILENO,szBuf,sizeof(szBuf));
                             
    szBuf[iRet]=0;    //read是以无类型指针方式读的数据,不会自动在缓冲区后加0结束标记。
                             
    sprintf(szBuf2,"The string is:%s",szBuf);
                             
    write(STDOUT_FILENO,szBuf2,strlen(szBuf2));
                             
    return 0;
                             
}
                             
 | 
LINUX读写文件的更多相关文章
- LINUX读写文件区别
		
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
 - Linux Direct 文件读写(文件DIO)
		
有时候,读写文件并不想要使用系统缓存(page cache),此时 direct 文件读写就派上了用场,使用方法: (1)打开文件时,添加O_DIRECT参数: 需要定义_GNU_SOURCE,否则找 ...
 - 【转】 Linux内核中读写文件数据的方法--不错
		
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大 ...
 - 【转】在linux内核中读写文件 -- 不错
		
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成 ...
 - Linux一个简单的读写文件
		
(1)linux中的文件描述符fd的合法范围是或者一个正正数,不可能是一个负数. (2)open返回的fd程序必须记录好,以后向这个文件的所有操作都要靠这个fd去对应这个文件,最后关闭文件时也需要fd ...
 - Android 怎样在linux kernel 中读写文件
		
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
 - linux下c通过虚拟地址映射读写文件的代码
		
在代码过程中中,把开发过程中比较好的一些代码片段记录起来,如下的代码内容是关于 linux下c通过虚拟地址映射读写文件的代码,应该对小伙伴有些好处.#include<stdio.h>#in ...
 - LINUX文件格式化读写(文件指针,缓冲)
		
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
 - Linux平台下利用系统接口函数按照行读写文件
		
要求:支持大文件(1M)一次性读入 源代码如下: #include<stdio.h> #include<fcntl.h> #include<stdlib.h> #i ...
 
随机推荐
- C#+GDAL读取影像(1)
			
环境:VS2010,C#,GDAL1.7 读取影像: using System; using System.Collections.Generic; using System.ComponentMod ...
 - 用Python实现的数据结构与算法:队列
			
一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行. 二.ADT 队列ADT(抽象数据类型)一般提供以下接口: Qu ...
 - ruby中的**
			
在ruby中,**是乘方的意思.它是一个右结合性的运算.如下: 在多个乘方的时候,会先进行后面的乘方运算,结果作为指数再与前一位进行乘方运算.
 - pycharm添加git ignore
			
pycharm现在提供了git ignore,很方便 从这里下载扩展 https://plugins.jetbrains.com/plugin/7495--ignore 放到pycharm根目录\pl ...
 - IBM究竟是一家怎样的公司
			
每次被问到这样的“简单”问题,我都很纠结: 这家公司,从创始至今已经积累了几十万种技术(2015年蝉联专利排行榜23年之久,仅2015年专利数7355项),开发了上万种产品(从银行的交易系统,到航空的 ...
 - Sybase中的load table的用法
			
Sybase中的load table的用法 用sybase iq作为数据仓库的存储,确实有其独特的特点和优势,但是在数据ETL的时候,如果用insert.update方式,速度太慢,大概是2秒钟左右一 ...
 - Python3.x:生成器简介
			
Python3.x:生成器简介 概念 任何使用yield的函数都称之为生成器:使用yield,可以让函数生成一个序列,该函数返回的对象类型是"generator",通过该对象连续调 ...
 - Sybase数据库常用函数
			
Sybase数据库常用函数 一.字符串函数 1,ISNULL(EXP1,EXP2,EXP3,...) :返回第一个非空值,用法与COALESCE(exp1,exp2[,exp3...])相同: 2,T ...
 - ELF文件分析
			
(1)文件ELF.c (2)编译: gcc -c ELF_1.c -o ELF_1.o (3)显示文件类型: (4)查看大小: (5)转换为16进制 (6)显示各段信息 (7)分析
 - Cooperation.GTST团队第四周项目总结
			
项目进展 这周我们的主要学习内容是: 1.研究学习如何导入博客详情页. 2.继续研究如何使用博客园的相关接口,导入相关jar包实现页面整体效果: 在我们使用其它APP或者上网浏览论坛.网页等时,通常都 ...