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

灵犀科技 高端网站建设背景图互联网创业项目整合网站

灵犀科技 高端网站建设背景图,互联网创业项目整合网站,html代码块,湖北省电力建设三公司网站观看本文之前请先阅读Linux Day10的相关内容 1.touch 1.1 open系统调用 int open(const char*path,int oflags,mode_t mode); oflags参数: O_APPEND:把写入数据追加在文件的末尾 O_TRUNC:把文件长度设置为0,丢弃已有的内容 O_CREAT:如果需要&#…

观看本文之前请先阅读Linux Day10的相关内容

1.touch

1.1 open系统调用

int open(const char*path,int oflags,mode_t mode);

oflags参数:

O_APPEND:把写入数据追加在文件的末尾

O_TRUNC:把文件长度设置为0,丢弃已有的内容
O_CREAT:如果需要,就按参数mode给出的访问模式创建文件
O_EXCL:与O_CREAT一起使用,确保调用者创建出文件。

mode参数:

1.2 代码实现

 所以创建目录文件就可以用ope系统调用

 if(strcmp(cmd,"touch")==0){int fdw=open(myargv[1],O_CREAT,S_IRUSR|S_IXOTH);close(fdw);continue;}

2.mv

2.1 文件读取操作

2.1.1 open

详细参考1.1open操作

2.1.2 read

系统调用read的作用是:从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并把它放在数据区buf中,它返回实际读入的字节数,这可能小于请求的字节数,如果read调用返回0,就表示未读入任何数据,已达到文件尾,同样返回-1,表示read调用出现了错误。

size_t read(int fildes,void*buf,size_t nbytes);

2.1.3 write

系统调用write的作用是把缓冲区的前nbytes个字节写入与文件描述符fildes关联的文件中。它返回实际写入的字节数。如果文件描述符有错误或者底层的设备驱动程序对数据长度比较敏感,该返回值可能小于nbytes。如果这个函数返回0,就表示未写入任何数据,如果它返回-1,就是表示write调用中出现了错误,错误的代码保存在全局变量errno里。

size_t wirite(int fildes,const void *buf,size_t nbytes);

2.1.4 remove

remove()函数用于删除指定的文件,其原型如下:

头文件:#include <stdio.h>
    int remove(char * filename);

【参数】filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;若参数filename 为一目录,则调用rmdir()来处理。

【返回值】成功则返回0,失败则返回-1,错误原因存于errno。

2.1.5 realpath

realpath()库函数对pathname中的所有符合链接一一解引用,从而成功一个以空字符结尾的字符串,内涵相应的绝对路径名:

NAMErealpath - 返回规范化的绝对路径名 SYNOPSIS#include <limits.h>#include <stdlib.h>char *realpath(const char *path, char *resolved_path);

2.1.6  chdir

程序可以像用户在文件系统那样来浏览目录,就像在shell里使用cd命令来切换目录一样,程序使用chdir系统调用;

int chdir(const char*path);

2.2 代码实现

初步思路:这个实现方法比较复杂,我的想法就是因为mv如果后面两个参数在同一个普通文件那么mv命令相当于cp命令,如果不一样,那么就将原先的内容转移到另外一个。

所以我先判断是否在一个文件中,如果在执行cp,如果不在,先将第一个参数的文件位置记录在一个数组中,然后打开第二个参数的文件位置,使用open函数创建一个目录文件,然后将之前打开的参数一的文件内容读出来,算读算写入新创建的目录文件(类似cp)当一切都执行完毕,我们关闭两个文件,然后将路径切换至第一个参数文件位置(这个我们在前面的数组中已经保存了),然后将第一个文件删除即可。

if(strcmp(cmd,"mv")==0){char rp1[128]={0};char rp2[128]={0};realpath(myargv[1], rp1);realpath(myargv[2],rp2);if(strcmp(rp1,rp2)==0){cmd="cp";}else{printf("%s\n",myargv[1]);printf("%s\n",myargv[2]);int fdw1=open(myargv[1],O_RDONLY);char curr_dir[128]={0};if(getcwd(curr_dir,128)==NULL){printf("getcwd err\n");}if(myargv[2]!=NULL){if(chdir(myargv[2])==-1){perror("cd err\n");}int fdw2=open(myargv[1],O_CREAT,S_IRUSR|S_IXOTH);char buff[128]={0};int num=0;while(num=read(fdw1,buff,128)){write(fdw2,buff,num);}close(fdw1);close(fdw2);chdir(curr_dir);}remove(myargv[1]);}continue;}

3.cp

3.1 文件读取操作

3.1.1 open

3.1.2 read

3.1.3 write

3.2 代码实现

 if(strcmp(cmd,"cp")==0){char*ptr1=myargv[1];char*ptr2=myargv[2];assert(ptr1!=NULL);int fdw1=open(ptr1,O_RDONLY,0600);int fdw2=open(ptr2,O_CREAT|O_RDWR,0600);char buff[128]={0};int num=0;while(num=read(fdw1,buff,128)){write(fdw2,buff,num);} close(fdw1);close(fdw2);continue;}

4.cat

4.1 文件读取操作

4.1.1 open

详细参考1.1open操作

4.1.2 read

4.1.3 write

4.2 代码实现

所以cat实现起来就变得简单多了,我们先将文件读出来,存进一个字符数组(这里我们用定长的数组,所以cat文字有限),然后遍历字符数组即可

 if(strcmp(cmd,"cat")==0){int fdw=open(myargv[1],O_RDONLY,0600);if(fdw<0){printf("fopen err\n");continue;}char buff[256]={0};int num=0;int i=0;while(num=read(fdw,buff,256)){for(int i=0;i<num;i++){printf("%c",buff[i]);fflush(stdout);}}continue;}

5.ls

int main(int argc ,char *argv[])
{char buff[128] = {0};if(strncnp("." ,argv[1],1)== || strncmp ("/" ,argv[1],1)==)strcpy(buff ,argv[1]);elseif(getcwd(buff, 128)==NULL) exit(1);DIR* pdir = opendir(buff);if(pdir-=NULL) exit(1);struct dirent* s = NULL ;while( (s=readdir(pdir))!=NULL){if(strncmp(argv[1],"-a" ,2)==0){struct stat filestat;stat(s->d_ nane ,&fllestat);if(S_ ISDIR(filestat.st mode))printf(" 1033[1;34nxs\033[0m" ,S->d nane);elseif(filestat.st_ mode & (S_ IXUSR|S_ IXGRPIS. IXOTH))printf(" 1033[1;32mxs\033[0m",S-xd nane);elseprintf("%s", s->d name);}else if(strncmp(argv[1],"-i" ,2)==0) {if(strncmp("." s->d nane ,1)==) continue;struct stat filestat; stat(s->d_ nane ,&fLestat);if(5_ ISDIR(filestat.st mode))printf("%ld 1033[1;34m%s\033[0m" ,5->d ino,s->d nane);elseif(filestat.st_ mode & (S_ IXUSRIS_ IXGRPIS_ IXOTH)){printf("%ld \033[1;327m%s\033[0m" ,s->d. _ino,s->d_ nane);else printf("%ld %s ",s->d_ ino,S->d nane);}else if(strncmp(argv[1],"-l" ,2)==0) {if(strncmp(".",s->d nane,1)==0) continue;}else{if(strncmp("." ,S->d nane,1)--0) continue;struct stat filestat;stat(s->d nane ,&fiLestat);if(s_ISDIR(filestat.st mode))printf(" \033[1;34m%s\033[@m” ,s->d. nane);elseif(filestat.st mode & (S_ IXUSRIS IXGRPIS IXOTH))printf(”\033[1;32m%s\033[0m” ,s->d. nane);else printf("%s " ,s->d nane);}}printf("\n");closedir(pdir);exit(0);
}

好了,这里mbash实现的差不多,只不过各个命令的实现还是比较复杂,等过段时间将这些方式再优化优化,找到最优解。

http://www.yayakq.cn/news/654961/

相关文章:

  • 军事网址大全 网站百度搜不到WordPress文章
  • 专门做淘宝代运营的网站贸易网站有哪些
  • 机械营销网站建设案例石家庄网站制作招聘
  • 无锡网页建站社群营销是什么意思
  • 大型网站建立wamp 怎么做两个网站
  • 怎么做文学动漫网站在线生成固定悬浮导航的工具网站
  • 网站建设征求意见wordpress vip会员主题
  • 天河做网站平台中国最新军事新闻最新消息2023
  • 视频上传网站建设中国建设银行集团网站
  • 河南金建建设有限公司网站wordpress英文显示改中文字体
  • 重庆商业网站有哪些学大教育培训机构怎么样
  • 企业网站建设代码杭州网站建设哪个平台好
  • 部门网站建设工作总结网站建设模板犀牛云
  • 小型网站搭建徐州比居网络科技有限公司
  • 如何选择网站做站方向网上做网站任务
  • 网站建设所需域名网站优化专家
  • 宁波网站推广有关做聚合物电池公司的网站
  • 网站建设规划方案包括天津数字防疫
  • 湖南网站建设 莫道手机购物网站怎么推广
  • 青海网站如何建设天津百度推广排名
  • 如何做一张网站平面效果图江苏建设信息网证书查询电子证书
  • 南京斯点企业网站建设郑州seo学校
  • 软件下载网站哪个比较好seo 推广怎么做
  • 网站新版建设中新华路街道网站建设
  • 宣城市建设监督管理局网站下载qq刷赞网站推广软件
  • 网站侧边栏网站建设有钱赚吗
  • 网站目录扫描番禺做网站费用
  • editplus怎么创网站wordpress 文章表
  • 鲜花便宜的网站建设网络工程师是干什么的
  • 大型的网站建设代理网游要多少钱