路遥见人心,日久知马力

博客园 首页 新随笔 联系 订阅 管理

文件读写方面要注意的事有:

1. 忘了怎么用函数,可以直接 man 手册查

2. 打开描述符后应该检查一下是否打开,并且用完后关闭

3. 注意 read 循环读取一个文件的方法

4. lseek可以跳过文件中的内容,如果不手动更新,那就是读了多少就挪多少

一些简单的代码如下:

1 #include<unistd.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
/*
    open
    close
    read
    write
    lseek
    dup
    fcntl
    ioctl
*/
#include<memory.h>
#include<iostream>
#include"unix.h"
using namespace std;


struct Student{
    char name[20];
    char pwd[20];
};

// 保存学生到文件中
bool saveStruct(Student & s,int fd){
    int i1 = write(fd,s.name,strlen(s.name));
    int i2 = write(fd,s.pwd,strlen(s.pwd));
    write(fd,"\n",1);
    return i1!=0&&i2!=0&&i1!=-1&&i2!=-1;
}

int main(int argc,char * argv[]){

    // 录入学生
    if(argc>=4){
        Student s;
        memcpy(s.name,argv[1],strlen(argv[1]));
        memcpy(s.pwd,argv[2],strlen(argv[2]));
        int fd_save = open(argv[3],O_CREAT|O_APPEND|O_RDWR,0666);
        bool save = saveStruct(s,fd_save);
        if(save){
            cout<<"保存用户成功!"<<endl;
        }
        close(fd_save);
    }

    // 仅输入文件名,则读取
    if(argc==2){
        int fd = open(argv[1],O_RDONLY);
        if(errno == ENOENT){
            cout<<"没有该文件!"<<endl;
        }
        char buf[20];
        lseek(fd,0,SEEK_SET);
        int len = read(fd,buf,20);
        cout<<string(buf)<<endl;
         len = read(fd,buf,20);
        cout<<string(buf)<<endl;
        
        close(fd);
    }// 复制文件
    else if(argc == 3){
        int fd = open(argv[1],O_RDONLY);
        int fd_cp = open(argv[2],O_RDWR|O_CREAT,0666);

        char buf[10];
        int len = read(fd,buf,10);
        while(len != EOF && len != 0){
            cout<<string(buf);
            
            int wN = write(fd_cp,buf,len);
            
            cout<<"写入:"<<wN<<endl;
            if(wN!=-1)
                cout<<"写入10B成功!"<<endl;
            // 最好清一下这个缓存
            memset(buf,0,10);
            len = read(fd,buf,10);
        }
        close(fd);
        close(fd_cp);
    }
    return 0;
}

  

posted on 2023-11-09 15:07  只讲大白话  阅读(28)  评论(0编辑  收藏  举报