当前位置: 首页 > news >正文

Linux中的文件操作

 linux中exec*为加载器,可以将程序加载到内存。

main()函数也是函数,也要被调用,也要被传参

故在一个程序中exec*系列的函数先被执行

程序替换中execve是系统调用,其他的都是封装。

进程程序替换

1.创建子进程的目的?

a.想让子进程执行父进程代码的一部分

b.想让子进程执行一个全新的程序

一个简单的命令行解释器

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<assert.h>#define NUM 1024
char lineCommand[NUM];
#define OPT_NUM 64
char* myargv[OPT_NUM];int main()
{while(1){printf("用户名@主机名 当前路径#");fflush(stdout);char* s=fgets(lineCommand,sizeof(lineCommand)-1,stdin);assert(s!=NULL);(void)s;lineCommand[strlen(lineCommand)-1]=0;//printf("test:%s\n",lineCommand);//字符串切割myargv[0]=strtok(lineCommand," ");int i=1;while(myargv[i++]=strtok(NULL," "));
#ifdef DEBUGfor(int i=0;myargv[i];i++){printf("myargv[%d]:%s\n",i,myargv[i]);}
#endif//执行命令pid_t id=fork();assert(id!=-1);if(id==0){execvp(myargv[0],myargv);}waitpid(id,NULL,0);}return 0;
}
4.撤销与恢复
  • 撤销语法::u //键盘输入符号:和字母u再回车(属于末行模式),撤销上一步操作

  • 恢复语法:ctrl+r //键盘ctrl+r,恢复撤销操作(即取消之前的撤销操作)

Linux(CENTOS)操作系统_centos cp-CSDN博客文章浏览阅读1k次,点赞23次,收藏8次。学习Linux做的笔记分享一些_centos cphttps://blog.csdn.net/2301_79693363/article/details/137720252基础指令

vim中批量化注释

ctrf+v+I+esc

1,对文件操作的本质,进程对文件的操作

2.一个文件要被访问,就必须先被打开。

一个文件被形成的时候有默认文件掩码,普通文件以666作为起始权限,666&~umask可以的到最终权限。

目录默认:777 普通文件默认666

#include<stdio.h>
#include<unistd.h>
#include<string.h>#define FILE_NAME "log.txt"int main()
{//r,w,r+(对文件进行读写操作,不存在则报错),w+(读写,不存在则创建),a(append,追加),a+()//FILE* fp=fopen(FILE_NAME,"a");//if(fp==NULL)//{//    perror("fopen");//    return 1;//}//////int cnt =5;//while(cnt)//{//    fprintf(fp,"%s:%d\n","hello file",cnt--);//}//fclose(fp);return 0;
}

对文件进行一些基础操作。

O_WRONLY|对文件进行写入

O_CREAT,0666   控制文件的权限

|O_TRUNC   每次以写的形式打开文件,文件对自动清空

O_APPEND   追加

文件操作的本质:进程和被打开文件的关系。

一个进程可以打开多个文件,系统中存在大量被打开的文件,被打开的文件会被OS管理起来,

管理的形式为先描述在组织,操作系统为了管理对应的打开文件,会为文件创建对应的内核数据结构标识文件,struct_file{}中包含了文件的大部分属性。

三个标准输入输出流:

stdin:->键盘

stdout:->显示器

stderr:->显示器

./myfile
stdin->fd: 0
stdout->fd: 1
stderr->fd: 2
fd:3

stdin:->键盘

stdout:->显示器

stderr:->显示器         默认占用文件描述符的0,1,2其他文件从3开始

FILE* fp=fopen();

FILE是一个结构体,结构体中必有一个字段->文件描述符。

进程的文件描述符表:

struct file* fd array[]

进程文件描述符表。

 文件描述符的本质是数组下标。

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<assert.h>#define FILE_NAME(number)"log.txt"#numberint main()
{printf("stdin->fd: %d\n",stdin->_fileno);printf("stdout->fd: %d\n",stdout->_fileno);    printf("stderr->fd: %d\n",stderr->_fileno);umask(0);int fd0 = open(FILE_NAME(1),O_WRONLY|O_CREAT|O_APPEND,0666);//int fd=open(FILE_NAME,O_WRONLY|O_CREAT|O_TRUNC,0666);//if(fd<0)//{//    perror("open");//    return 1;//}printf("fd:%d\n",fd0);close(fd0);//r,w,r+(对文件进行读写操作,不存在则报错),w+(读写,不存在则创建),a(append,追加),a+()//FILE* fp=fopen(FILE_NAME,"a");//if(fp==NULL)//{//    perror("fopen");//    return 1;//}//////int cnt =5;//while(cnt)//{//    fprintf(fp,"%s:%d\n","hello file",cnt--);//}//fclose(fp);return 0;
}

http://www.lryc.cn/news/407516.html

相关文章:

  • [排序]hoare快速排序
  • freertos的学习cubemx版
  • PyQt 信号与槽功能
  • navicat premium安装和破解
  • OSI七层模型
  • Qt自定义MessageToast
  • 自动化测试 pytest 中 scope 限制 fixture使用范围!
  • 软件-vscode-plantUML-drawio
  • Python爬虫实战案例(爬取图片)
  • 智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界
  • ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式
  • Elastic 及阿里云 AI 搜索 Tech Day 将于 7 月 27 日在上海举办
  • 基于ssm+vue医院住院管理系统源码数据库
  • 【在排序数组中查找元素的第一个和最后一个位置】python刷题记录
  • Pytorch基础:Tensor的squeeze和unsqueeze方法
  • PHP压缩打包,下载目录或者文件,解压zip文件
  • 后端面试题日常练-day08 【Java基础】
  • Linux:core文件无法生成排查步骤
  • 大模型学习资源
  • 约定(模拟赛2 T3)
  • Java推送xml数据进行http请求
  • Docker安装 OpenResty详细教程
  • 前端位运算运用场景小知识(权限相关)
  • 【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析
  • 使用框架构建React Native应用程序的最佳实践
  • Godot入门 02玩家1.0版
  • Docker-Compose配置zookeeper+KaFka+CMAK简单集群
  • Python中,集合几种基本运算
  • netsuite查询货品库存
  • Java 实现分页的几种方式详解