信息安全系统设计基础第九周学习总结-吕松鸿

cp

#include <stdio.h>//标准输入输出
#include <stdlib.h>//C标准函数库
#include <unistd.h>//Unix类系统定义符号常量
#include <fcntl.h>//定义了很多宏和open,fcntl函数原型

#define BUFFERSIZE 4096//定义存储器容量
#define COPYMODE 0644//定义复制的长度

void oops(char *, char *);

int main(int argc, char *argv[])
{
  int in_fd, out_fd, n_chars;//三个描述符值
  char buf[BUFFERSIZE];//存储器位置

 

/*cp的参数有两个,分别是要复制的文件,和目的目录,这样一共应该是有三个操作数 所以要先检查argc的值是否为三,如果不是,返回标准错误*/
  if (argc != 3) {
  fprintf(stderr, "usage: %s source destination\n", *argv);
  exit(1);
}/*检查cp的第一个参数,要复制的文件,用open打开,in_fd为open返回的描述符 如果返回-1,代表打开失败,提示错误*/

  if ((in_fd = open(argv[1], O_RDONLY)) == -1)
    oops("Cannot open ", argv[1]);

/*检查cp的第二个参数,复制的目的地址,用create在目的地址创建新文件,out_fd为open返回的描述符 如果返回-1,代表创建失败,提示错误*/

  if ((out_fd = creat(argv[2], COPYMODE)) == -1)
    oops("Cannot creat", argv[2]);

  while ((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0)
    if (write(out_fd, buf, n_chars) != n_chars)
      oops("Write error to ", argv[2]);
  if (n_chars == -1)
    oops("Read error from ", argv[1]);


  if (close(in_fd) == -1 || close(out_fd) == -1)
    oops("Error closing files", "");
}/*这个是用来输出错误信息的函数*/

 void oops(char *s1, char *s2)
{
  fprintf(stderr, "Error: %s ", s1);
  error(s2);//用来将上一个函数发生错误的原因输出到标准设备(stderr)
  exit(1);
}

echostate

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>

int main()
{


  struct termios info;
  int rv;

  rv = tcgetattr( 0, &info ); /* read values from driver */

  if ( rv == -1 ){
    perror( "tcgetattr");
    exit(1);
}
  if ( info.c_lflag & ECHO )
    printf(" echo is on , since its bit is 1\n");
  else
    printf(" echo is OFF, since its bit is 0\n");

  return 0;
}

fileinfo

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

void show_stat_info(char *, struct stat *);

int main(int argc, char *argv[])
{
  struct stat info;

  if (argc>1)
  {

    if( stat(argv[1], &info) != -1 ){
      show_stat_info( argv[1], &info );
    return 0;
    }
   else
   perror(argv[1]);
  }
  return 1;
}
void show_stat_info(char *fname, struct stat *buf)
{
  printf(" mode: %o\n", buf->st_mode);
  printf(" links: %d\n", buf->st_nlink);
  printf(" user: %d\n", buf->st_uid);
  printf(" group: %d\n", buf->st_gid);
  printf(" size: %d\n", (int)buf->st_size);
  printf("modtime: %d\n", (int)buf->st_mtime);
  printf(" name: %s\n", fname );
}

信息安全系统设计基础第九周学习总结-吕松鸿_第1张图片

filesize

#include <stdio.h>
#include <sys/stat.h>

int main()
{
  struct stat infobuf;

  if ( stat( "/etc/passwd", &infobuf) == -1 )
    perror("/etc/passwd");
  else
    printf(" The size of /etc/passwd is %d\n", infobuf.st_size );
}

信息安全系统设计基础第九周学习总结-吕松鸿_第2张图片

ls1

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

void do_ls(char []);

int main(int argc, char *argv[])
{

/*如果操作数只有1个,表明ls后面没有带参数,默认为当前目录,.表示当前目录。*/
  if ( argc == 1 )
    do_ls( "." );

/*如果ls后面有参数,就把参数读入argv中。*/
  else
    while ( --argc ){
      printf("%s:\n", *++argv );
    do_ls( *argv );
  }

  return 0;
}/*因为ls和dir功能相近,用dir来实现ls*/

void do_ls( char dirname[] )
{
  DIR *dir_ptr;
  struct dirent *direntp;

    /*如果没有指向的那个地址,报错*/

  if ( ( dir_ptr = opendir( dirname ) ) == NULL )
    fprintf(stderr,"ls1: cannot open %s\n", dirname);
  else
  {

    /*递归的方式来读取*/
    while ( ( direntp = readdir( dir_ptr ) ) != NULL )
      printf("%s\n", direntp->d_name );
    closedir(dir_ptr);
  }
}

信息安全系统设计基础第九周学习总结-吕松鸿_第3张图片

ls2

 

信息安全系统设计基础第九周学习总结-吕松鸿_第4张图片

setecho

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>

#define oops(s,x) { perror(s); exit(x); }

int main(int argc, char *argv[])
{
  struct termios info;

  if ( argc == 1 )
    exit(0);

  if ( tcgetattr(0,&info) == -1 ) /* get attribs */
    oops("tcgettattr", 1);

  if ( argv[1][0] == 'y' )
    info.c_lflag |= ECHO ; /* turn on bit *//*打开提示符*/
  else
    info.c_lflag &= ~ECHO ; /* turn off bit *//*隐藏提示符*/

  if ( tcsetattr(0,TCSANOW,&info) == -1 ) /* set attribs */
    oops("tcsetattr",2);

  return 0;
}

spwd

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

ino_t get_inode(char *);
void printpathto(ino_t);
void inum_to_name(ino_t , char *, int );

int main()
{
  printpathto( get_inode( "." ) );
  putchar('\n');
  return 0;
}

void printpathto( ino_t this_inode )
{
  ino_t my_inode ;
  char its_name[BUFSIZ];

  if ( get_inode("..") != this_inode )
  {
    chdir( ".." );

    inum_to_name(this_inode,its_name,BUFSIZ);

    my_inode = get_inode( "." );
    printpathto( my_inode );
    printf("/%s", its_name );

  }
}

void inum_to_name(ino_t inode_to_find , char *namebuf, int buflen)
{
  DIR *dir_ptr;
  struct dirent *direntp;

  dir_ptr = opendir( "." );
  if ( dir_ptr == NULL ){
    perror( "." );
    exit(1);
  }


  while ( ( direntp = readdir( dir_ptr ) ) != NULL )
    if ( direntp->d_ino == inode_to_find )
    {
      strncpy( namebuf, direntp->d_name, buflen);
      namebuf[buflen-1] = '\0';
      closedir( dir_ptr );
    return;
  }
    fprintf(stderr, "error looking for inum %d\n", (int) inode_to_find);
    exit(1);
}

ino_t get_inode( char *fname )
{
   struct stat info;

  if ( stat( fname , &info ) == -1 ){
    fprintf(stderr, "Cannot stat ");
    perror(fname);
    exit(1);
  }
  return info.st_ino;
}

testioctl

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>

int main()
{
  struct winsize size;
  if( isatty(STDOUT_FILENO) == 0)
    exit(1);
  if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) < 0) {
    perror("ioctl TIOCGWINSZ error");
    exit(1);
  }

  printf("%d rows %d columns\n", size.ws_row, size.ws_col);
  return 0;
}

who1

#include <stdio.h>
#include <stdlib.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>

#define SHOWHOST

int show_info( struct utmp *utbufp )
{
  printf("%-8.8s", utbufp->ut_name);
  printf(" ");
  printf("%-8.8s", utbufp->ut_line);
  printf(" ");
  printf("%10ld", utbufp->ut_time);
  printf(" ");
#ifdef SHOWHOST
printf("(%s)", utbufp->ut_host);
#endif
  printf("\n");

  return 0;
}
int main()
{
  struct utmp current_record;
  int utmpfd;
  int reclen = sizeof(current_record);

/*打开UTMP_FILE读取信息,如果打开失败则输出失败信息。*/

  if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
    perror( UTMP_FILE );
    exit(1);
  }

/*读取信息到存储器中,reclen就是是读的字节数,然后再调用函数打印出来。*/
  while ( read(utmpfd, &current_record, reclen) == reclen )
    show_info(&current_record);
    close(utmpfd);
  return 0;
}

 

信息安全系统设计基础第九周学习总结-吕松鸿_第5张图片

who2

 

信息安全系统设计基础第九周学习总结-吕松鸿_第6张图片

 

 

你可能感兴趣的:(信息安全系统设计基础第九周学习总结-吕松鸿)