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 DEBUG
    for(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"#number

int 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;
}

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值