IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux编程 -> 正文阅读

[系统运维]Linux编程

编程实现一个简单的迷你型操作系统文件管理功能模块,基本功能包括:
(1) 显示系统当前用户,当前工作目录。
(2) 显示指定文本文件的内容,文件名称由键盘输入。
(功能类似命令 cat aa.txt )
(3) 显示指定文件的名称,大小,权限等信息,文件名称由键盘输入。
(功能类似命令 ls –l aa.txt )
(4) 文件复制功能,源文件,目标文件名均由键盘输入
(功能类似命令cp aa.txt bb.txt )
(5)创建文件功能(文本文件)
(功能类似命令touch aa.txt )

#include <stdio.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<syslog.h>
#include<string.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<utmp.h>
#include<pthread.h>
#define MAX  1000
void show_info(struct utmp* utbufp)
{
    if(utbufp->ut_type!=USER_PROCESS)
    return;
    printf("%-8.8s", utbufp->ut_name);
    printf(" ");
    printf("%-8.8s", utbufp->ut_line);
    printf(" ");
    printf("(%s)", utbufp->ut_host);
    printf("\n");
}
int main()
{
  int fd,fd1,fd2,utmpfd,num,choice,del,i;
  struct utmp current_record;
  int reclen = sizeof current_record;
  int n=0;
  char buffer[MAX],file[20],file1[20],file2[20];
  char *buff=NULL;//定义一个指针用来指向复制的内容
  struct stat statbuf={0};
  while(1)
  {
    printf("\n**************************************\n");
    printf("0. 	退出系统\n");
    printf("1.  查看系统当前用户\n");
    printf("2.  显示系统当前目录\n");
    printf("3. 	创建文件\n");
    printf("4.  输入文件内容\n");
    printf("5. 	查看文件内容\n");
    printf("6. 	显示文件信息\n");
    printf("7. 	文件复制功能\n");
    printf("8. 	删除文件\n");
    printf("**************************************\n");
    printf("请选择相关操作:");
    scanf("%d",&choice);
  switch(choice)
  {
      case 0:  exit(0);
      case 1:  
         if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1)
    {
        perror(UTMP_FILE);
        exit(1);
    }
    while (read(utmpfd, &current_record, reclen) == reclen)
    {
        show_info(&current_record);
    }
    close(utmpfd);
    break;
    case 2:
       if(NULL==getcwd(buffer,MAX))
       perror("getcwd"); 
       printf("当前目录为:%s\n",buffer);       
     break;
     case 3:  
       printf("请输入要创建的文件名:\n");
       scanf("%s",file);
       fd=open(file,O_WRONLY,0644);
       if(fd==-1)
       printf("文件创建失败");
       else
       printf("文件创建成功");
      break;
      case 4:
        printf("请输入要打开的文件名:\n");
        scanf("%s",file);
        fd = open(file,O_WRONLY);
        if(fd==-1)
        { 
           printf("文件打开失败,请检查是否存在!:\n");
        }
        else
        {
            printf("请输入文件内容,长度小于128个字符:\n");
            num = read(0,buffer,MAX);
            write(fd,buffer,num);
            printf("文件输入成功!\n");
       }
       break;
      case 5:
          printf("请输入要打开的文件名!\n");
          scanf("%s",file);
          fd = open(file,O_RDONLY,0750);
          if(fd==-1)
          { 
           printf("文件不存在!\n");
          break;
          }
          num = read(fd,buffer,MAX);
          printf("文件内容为\n");
          write(1,buffer,num);
      break;
      case 6:
          printf("输入想要查看的文件名\n");
          scanf("%s",file);
          if((lstat(file,&statbuf))==-1){
                perror("stat fail");
                exit(1);
            }
           switch (statbuf.st_mode & S_IFMT) {
           case S_IFBLK:  printf("b");            break;
           case S_IFCHR:  printf("c");            break;
           case S_IFDIR:  printf("d");            break;
           case S_IFIFO:  printf("p");            break;
           case S_IFLNK:  printf("l");            break;
           case S_IFREG:  printf("-");            break;
           case S_IFSOCK: printf("s");            break;
           default:       printf("?");            break;
           }
           //打印文件类型
         char f_mode[10]={0};
         char tmp_buf[]="rwxrwxrwx";
         for(i=0;i<9;i++)
         {
                 if(statbuf.st_mode & (1<<(8-i)))
                         f_mode[i]=tmp_buf[i];
                 else
                         f_mode[i]='-';
         }
         printf("%s ",f_mode);
			//打印文件权限
         printf("%ld ",statbuf.st_nlink);
			//打印硬链接数
         struct passwd *uid=getpwuid(statbuf.st_uid);
         struct group  *gid=getgrgid(statbuf.st_gid);
         printf("%s %s\t",uid->pw_name,gid->gr_name);
			//打印所有者和所属组
         printf("%8ld ",statbuf.st_size);
         struct tm *t=gmtime(&(statbuf.st_atime));
         printf("%d月  %d %d:%d ",t->tm_mon,t->tm_mday,t- >tm_hour,t->tm_min);
			//打印访问日期
         if((statbuf.st_mode& S_IFMT)==S_IFLNK){
                 char sym_buf[50]={0};
                 readlink(file,sym_buf,sizeof(sym_buf));
                 printf("%s -> %s",file,sym_buf);
         }
         else
                 printf("%s",file);
             //打印文件名
        printf("\n");
        break;
    case 7:
      printf("输入想要复制的源文件和目标文件\n");
      scanf("%s %s",file1,file2);
      fd1=open(file1,O_RDWR);//可读可写,打开源文件     
      int size=lseek(fd1,0,SEEK_END);//将光标定位到源文件的尾部,目的计算源文件的大小
      lseek(fd1,0,SEEK_SET);//将光标定位到源文件的头部,从头读取内容
      buff=(char *)malloc(sizeof(char)*size+8);//开辟buff的内存空间
      int n_read=read(fd1,buff,size);//将源文件的内容读取出来
      fd2=open(file2,O_RDWR|O_CREAT,0600);//打开副本,没有则新建副本
      int n_write=write(fd2,buff,size);//将内容复制到副本 
      close(fd1);
      close(fd2);
      break;
    case 8:
      printf("输入要删除的文件名:\n");
      scanf("%s",file);
      fd = open(file,O_RDONLY,0750);
      if(fd==-1)
        { 
          printf("文件不存在\n");
        }
      int ret = unlink(file);   
      printf("文件删除成功\n");    
      if(ret < 0)
       {
        perror("删除失败");
       }
     break;
     default :
     break;
}
}
}  

程序运行截图如下:
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:55:01  更:2021-12-24 18:57:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:55:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码