linux文件编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文是我学习Linux文件编程所做的笔记:有以下的内容
1:文件打开及创建
2:文件写入操作和读取操作和光标移动操作


提示:以下是本篇文章正文内容,下面案例可供参考

一、文件打开及创建

open函数原型:int open(const char *pathname, int flags);
*pathname是创建文件的路径
flags是权限
open函数打开后必须要返回一个文件描述符fd:后续写入,读取都是通过文件描述符进行操作。
flags权限有多少种:
O_RDONLY-只读打开
O_WRONLY-只写打开
O_RDWR-只读只写打开

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>

int main()
{
    int fd;

   // int open(const char *pathname, int flags);
 
    fd=open("./file1",O_RDWR);
    
    printf("fd=%d\n",fd);

    return 0;
}

O_CREAT文件不存在时则创建他,使用这个选项时,必须同时说明第三个参数。0600是可读可写的意思

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>

int main()
{
    int fd;
    
    fd=open("./file1",O_RDWR);
    if(fd=-1){
        printf("open file1 failed\n");
        fd=open("./file1",O_RDWR|O_CREAT,0600);
        if(fd>0){
              printf("creat file1 succes!\n");
        }
    } 
       
    return 0;
}

O_EXCL如果同时指定了O_CREAT,文件已经存在,则出错

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>

int main()
{
    int fd;
    
    fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);
	if(fd>0){
	      printf("file1 cunzai!\n");
	    } 
       
    return 0;
}

O_APPEND每次写时加到文件的尾端

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
    int fd;
    char *buf="woyidingkeyichengweiqianrushigochengshi";
    
    fd=open("./file1",O_RDWR|O_APPEND);
    
    printf("open success:fd=%d\n",fd); 

   // ssize_t write(int fd, const void *buf, size_t count);
    
  int n_write=write(fd,buf,strlen(buf));
  if(n_write!=-1){//判断有没有写入成功
     printf("write %d byte to file\n",n_write);
  }

   close(fd);  
   
    return 0;
}

O_TRUNC去打开文件,如果这个文件本身有内容,而且为只读和只写成功打开,将长度截断为0.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
    int fd;
    char *buf="woyidingkeyichengweiqianrushigochengshi";
    
    fd=open("./file1",O_RDWR|O_TRUNC);
    
    printf("open success:fd=%d\n",fd); 

   // ssize_t write(int fd, const void *buf, size_t count);
    
  int n_write=write(fd,buf,strlen(buf));
  if(n_write!=-1){
     printf("write %d byte to file\n",n_write);
  }

   close(fd);  
   
    return 0;
}

二、文件写入操作和读取操作

1.文件写入操作和读取操作

API

**ssize_t write(int fd, const void *buf, size_t count);**
fd是文件描述符
buf是缓冲区内存
size是长度

**ssize_t read(int fd, void *buf, size_t count);**
fd是文件描述符
buf是缓冲区内存
size是长度

write函数的buf和read函数的buf不是同一个buf

write函数是把buf的内容写进文件描述符
read函数是把文件描述符的内容读到buf里

include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
    int fd;
    char *buf="woyidingkeyichengweiqianrushigochengshi";
    
    fd=open("./file1",O_RDWR);
    if(fd=-1){
        printf("open file1 failed\n");
        fd=open("./file1",O_RDWR|O_CREAT,0600);
        if(fd>0){
              printf("creat file1 succes!\n");
        }
    } 
    
    printf("open success:fd=%d\n",fd); 

   // ssize_t write(int fd, const void *buf, size_t count);
    
  int n_write=write(fd,buf,strlen(buf));
  if(n_write!=-1){
       printf("write %d byte to file\n",n_write);
  }

  char *readbuf;
  readbuf=(char*)malloc(sizeof(char)*n_write+1);
 // ssize_t read(int fd, void *buf, size_t count);
  int n_read=read(fd,readbuf,n_write);
 // int n_read=read(fd,readbuf,strlen(buf));
  
  printf("read:%d context:%s",n_read,readbuf);

   close(fd);  
   
    return 0;
}

2.光标移动操作

1中的代码是不可能成功读出内容的,因为光标没有移到头部,所以我们要移动光标,或者重新打开
重新打开:代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


int main()
{
  int fd;
  char *buf="woyidingkeyichengweiqianrushigochengshi";
    
  fd=open("./file1",O_RDWR);
  if(fd=-1){
        printf("open file1 failed\n");
        fd=open("./file1",O_RDWR|O_CREAT,0600);
        if(fd>0){
              printf("creat file1 succes!\n");
        }
  } 
    
  printf("open success:fd=%d\n",fd); 

   // ssize_t write(int fd, const void *buf, size_t count);
    
  int n_write=write(fd,buf,strlen(buf));
  if(n_write!=-1){
       printf("write %d byte to file\n",n_write);
  }
  
  close(fd);

  fd=open("./file1",O_RDWR);

  char *readbuf;
  readbuf=(char*)malloc(sizeof(char)*n_write+1);
 // ssize_t read(int fd, void *buf, size_t count);
  int n_read=read(fd,readbuf,n_write);

 // int n_read=read(fd,readbuf,strlen(buf));
  
  printf("read:%d context:%s\n",n_read,readbuf);

  close(fd);  
   
  return 0;
}

光标移动:三种:
SEET_SET 移到头部
SEET_CUR 从当前位置开始偏移
SEET_END移到尾巴
API

off_t lseek(int fd, off_t offset, int whence);
fd:文件描述符
offset:偏移多少位
whence:偏移的位置
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


int main()
{
  int fd;
  char *buf="woyidingkeyichengweiqianrushigochengshi";
    
  fd=open("./file1",O_RDWR);
  if(fd=-1){
        printf("open file1 failed\n");
        fd=open("./file1",O_RDWR|O_CREAT,0600);
        if(fd>0){
              printf("creat file1 succes!\n");
        }
  } 
    
  printf("open success:fd=%d\n",fd); 

   // ssize_t write(int fd, const void *buf, size_t count);
    
  int n_write=write(fd,buf,strlen(buf));
  if(n_write!=-1){
       printf("write %d byte to file\n",n_write);
  }

 // off_t lseek(int fd, off_t offset, int whence);
  lseek(fd,0,SEEK_SET);

  char *readbuf;
  readbuf=(char*)malloc(sizeof(char)*n_write+1);
 // ssize_t read(int fd, void *buf, size_t count);
  int n_read=read(fd,readbuf,n_write);

 // int n_read=read(fd,readbuf,strlen(buf));
  
  printf("read:%d context:%s\n",n_read,readbuf);

  close(fd);  
   
  return 0;
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值