and fopen、fwrite、fread、fseek、fputc、fclose、fgets、feof、
gcc 命令:用来编译C和C++文件-c 编译、汇编而不链接
-S 编译而不进行汇编和链接
-E 预处理
-v 同时显示编译器的代码
-o<文件> 将输出输入到指定文件
-x<语言> 指定语言
--help 显示帮助信息
--version 显示版本信息
grep “ xxx” * 字符串查找
open 函数
fd = open("./file1",O_RDWR|O_CREAT,0600);
fd = open("./file1",O_RDWR|O_CREAT|O_EXCL);-----出错 返回-1
fd = open("./file1",O_RDWR|O_APPEND);---写入数据在尾部追加,
fd = open("./file1",O_RDWR|O_TRUNC);------重头开始 完全覆盖。
#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 = "yanglang henshuai!!";
fd = open("./file1",O_RDWR);//打开文件
if(fd == -1)
{
printf("open creat failure\n");
fd = open("./file1",O_RDWR|O_CREAT,0600);//没有该文件就创建
if(fd > 0)
{
printf("open creat succeed\n");
}
}
printf("creat succeed fd:%d\n",fd);
// size_t write(int fd, const void *buf, size_t count);
int n_write = write(fd,buf,strlen(buf));//写入文件
printf("n_write = %d\n",n_write);
// off_t lseek(int fd, off_t offset, int whence);
lseek(fd,-19,SEEK_END); //光标移动到起始位置SEEK_SET/END/CUR起始尾巴当前位置
char *readBuf;
readBuf = (char*)malloc(sizeof(n_write+1));//强转成char* 指针开辟空间
// ssize_t read(int fd, void *buf, size_t count);
int n_read = read(fd,readBuf,n_write); //读取内容存放在 readBuf中 打印出来
printf("n_read = %d\n",n_read);
printf("readBuf:%s\n",readBuf);
return 0;
}
光标函数 lseek(fd,0,SEEK_SEK/CUR/END)光标在头/当前位置/尾巴
fd = creat("/home/CLC/demo/new",S_IRWXU/r/w/x); 创建并打开 写或者读
标准输入0、标准输出1、标准错误2 相当于scanf和printf
#include <stdio.h>
int main(int argc,char **argv)//传参数 几个 数组的数组二级指针
{
printf("argc=%d\n",argc); //个数
printf("argv[0]=%s\n",argv[0]); //a.out
printf("argv[1]=%s\n",argv[1]); //Src
printf("argv[2]=%s\n",argv[2]); //Des
return 0;
}
用光标计算大小后在开辟空间------打开argv1 读取数据放在buf中 打开argv2 把buf中数据写入
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdSrc;
int fdDes;
char *readBuf = NULL;
if(argc != 3) //是不是三个参数
{
printf("error\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR,0600);//打开argv[1]
// off_t lseek(int fd, off_t offset, int whence);
int size = lseek(fdSrc,0,SEEK_END);//光标计算文件偏移多少个 即文件大小
lseek(fdSrc,0,SEEK_SET); //光标回到头
readBuf = (char *)malloc(sizeof(char)*size +8);//开辟合适大小空间
// ssize_t read(int fd, void *buf, size_t count);
int n_read = read(fdSrc,readBuf,size); //数据读取到readBuf的数组中
fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);//打开argv[2]且用O_TRUNC清空
// ssize_t write(int fd, const void *buf, size_t count);
write(fdDes,readBuf,strlen(readBuf)); //把readBuf中的数据写入到argv[2]中
close(fdSrc);//关闭文件 防止损坏
close(fdDes);
return 0;
}
查找并修改
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
// off_t lseek(int fd, off_t offset, int whence);
int main(int argc,char **argv)
{
int fdSrc;
char *readBuf = NULL;
if(argc != 2) //判断是不是两个
{
printf("error\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR|O_CREAT,0600);//打开计算利用光标计算内容多大
int size = lseek(fdSrc,0,SEEK_END);
lseek(fdSrc,0,SEEK_SET);
readBuf = (char *)malloc(sizeof(char)*size + 8);
int n_read = read(fdSrc,readBuf,size); //把内容读到readBuf中
// char *strstr(const char *haystack, const char *needle);
char *p = strstr(readBuf,"LENG=");//strstr返回首地址
if(p == NULL) //判断是否找到
{
printf("not find\n");
exit(-1);
}
p = p + strlen("LENG="); //地址偏移
*p = '5'; //偏移后替换 修改内容
lseek(fdSrc,0,SEEK_SET); //光标又回到起点
write(fdSrc,readBuf,strlen(readBuf));//把修改后的内容重新写入该文件中完成修改
close(fdSrc);
return 0;
}
open文件 (取地址、指针)写入单个字符数字、结构体或者结构体数组
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct
{
int data;;
char a;
}Test;
int main()
{
Test t1[2] = {{100,'a'},{101,'b'}};//结构体数组
Test t2[2];
int fd = open("./file1",O_RDWR|O_CREAT,0600);//打开文件 把结构体的内容取地址 写进去
write(fd,&t1,sizeof(Test)*2); //注意取地址 大小内结构体大小*2
lseek(fd,0,SEEK_SET); //写完 光标移动到开始位置
read(fd,&t2,sizeof(Test)*2); //把文件里的内容读取到结构体数组2中
printf("t2:data=%d a=%c\n",t2[0].data,t2[0].a);//打印出来
printf("t2:data=%d a=%c\n",t2[1].data,t2[1].a);
close(fd); //关闭文件
return 0;
}
标准c库创建文件、读取文件、光标移动 grep查找
#include <stdio.h>
#include <string.h>
int main()
{
char *str = "yang lang good luck!!";
char buf[128] = {0};
// FILE *fopen(const char *path, const char *mode);
FILE *fp = fopen("./yanglang_Fopen.txt","w+");//打开文件 "w+"可读可写没有并创建
// size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
fwrite(str,sizeof(char)*strlen(str),1,fp);//写入内容、长度。次数、文件描述符
printf("fwrite: xie ru cheng gong\n");
// nt fseek(FILE *stream, long offset, int whence);
fseek(fp,0,SEEK_SET); //光标偏移到初始位置
// size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread(buf,sizeof(char)*strlen(str),1,fp);//内容读取出来到buf
printf("fread: %s\n",buf);
// int fclose(FILE *fp);
fclose(fp); //关闭文件
return 0;
}
//读和写的第三个参数是返回值n_write/n_read、n_read以实际返回个数为准
fputc用法
feof 、fgetc用法 feof找到最后返回1 否则返回0
#include <stdio.h>
#include <string.h>
int main()//写进文件夹
{
FILE *fp; //文件类型
char *str = "hello world!!";
int len = strlen(str);
int i = 0;
fp = fopen("./test.txt","w+");//打开或创建这个可读可写的文件
for(i=0;i<len;i++){
fputc(*str,fp); //把指针字符串内容一个个写入到fp指向的文件中
str++; //指针偏移字符串次数
}
fclose(fp); //关闭文件夹
return 0;
}
int main() //读取文件夹
{
FILE *fp;
char c;
fp = fopen("./test.txt","r"); //以只读方式打开文件夹
while(!feof(fp)){ //feof作用 没偏移到字符串尾部返回0 偏移到字符串返回1 所以取反
c = fgetc(fp); //每次获取一个字符 赋给C并打印出来
printf("%c",c);
}
fclose(fp);
return 0;
}