提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文是我学习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提供了大量能使我们快速便捷地处理数据的函数和方法。