第十周学习总结

代码的理解。

Who1.c

#include <stdio.h>//标准输入输出

#include    <stdlib.h>//C标准函数库

#include <utmp.h>

#include <fcntl.h>//定义了很多宏和open,fcntl函数原型

#include <unistd.h>//Unix类系统定义符号常量

#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);

if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){/*打开UTMP_FILE读取信息,如果打开失败则输出失败信息。*/

perror( UTMP_FILE );

exit(1);

}/*读取信息到存储器中,reclen就是是读的字节数,然后再调用函数打印出来。*/

while ( read(utmpfd, ¤t_record, reclen) == reclen )

show_info(¤t_record);

close(utmpfd);

return 0;

}

/*从UTMP_FILE文件中读取信息到存储器中,然后再用标准输出函数打印到屏幕上,最后关闭文件*/

Ls1.c

#include <stdio.h>

#include <sys/types.h>//基本系统数据类型

#include <dirent.h>//unix类目录操作的头文件

void do_ls(char []);

int main(int argc, char *argv[])/*如果操作数只有1个,表明ls后面没有带参数,默认为当前目录*/

{

if ( argc == 1 )

do_ls( "." );

else/*如果ls后面有参数,就把参数读入argv中。*/

while ( --argc ){

printf("%s:\n", *++argv );

do_ls( *argv );

}

return 0;

}

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);

}

}

echostate.c

#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;

}/* 检查命令行中的提示符是否显示的,如果显示,输入的命令都可见,不显示则表示输入的命令不可见*/

Sstecho.c

#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;

}

/*当echo is on的时候,输入的指令是可见的,当设置为off的时候,输入指令不可见*/

Filesize.c/*用st_size成员来计算文件的字节数大小,先判断是否有错误,没有的话就调用*/

#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 );

}

Fileinfo.c

#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将报错信息打印出来*/

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 );

}

/*这个功能用来实现显示文件信息,建立了一个stat数据结构 */

Cp1.c

#include        <stdio.h>

#include        <stdlib.h>

#include        <unistd.h>

#include        <fcntl.h>

#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];//存储器位置

if (argc != 3) {

fprintf(stderr, "usage: %s source destination\n", *argv);//argc的值不为三,返回标准错误

exit(1);

}

if ((in_fd = open(argv[1], O_RDONLY)) == -1)

oops("Cannot open ", argv[1]);//open打开如果返回-1,打开失败

if ((out_fd = creat(argv[2], COPYMODE)) == -1)//用create在目的地址创建新文件,out_fd为open返回的描述符

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);

perror(s2);

exit(1);

}

参考资料:闫佳欣同学上周的实践总结心得:C语言基础不好,通过百度了解了每个单词每个头文件的意思,通过参考和自学,大致理解了每个代码的基本功能。

时间: 2024-08-05 18:57:29

第十周学习总结的相关文章

20191302 《信息安全专业导论》第二周学习总结

2019-2020-20191302 <信息安全专业导论>第二周学习总结 教材学习内容总结 -<计算机科学概论>第一章 第十八章 -第一章 全景图 通过第一章的学习我了解了计算机系统的组成,硬件与软件,抽象的概念,计算机的发展历史以及计算机语言,对计算机有了初步的了解,体会到计算机从能充满整个教室的大块头到现在小巧玲珑的笔记本电脑经历了多代的演变,人类科技的进步速度之快令我j惊叹. -第十八章 计算的限制 通过这一章的学习,我了解到数学问题只有一小部分可解,只有一部分问题是计算机可

2019-2020-1 20191312《信息安全专业导论》第九周学习总结

2019-2020-1 20191312<信息安全专业导论>第九周学习总结 教材学习内容总结 这周学习了操作系统层的两章:操作系统和文件系统和目录.从操作系统开始,介绍了操作系统扮演的角色,管理者和服务者.接着介绍了操作系统如何管理进程和内存,并介绍了一些具体的方法.通过对这些管理方法的学习,我进一步了解了计算机的运行原理和方法.然后文件系统和目录这一章介绍了系统中或者说是计算机中文件的储存方法,了解了树状结构下的文件储存,我认为这是一种非常高效的储存方式.同时也学习了对文件的读写方式,和在读

2019-2020 20191212《信息安全专业导论》第二周学习任务总结

这周学习了<计算机科学导论>第一章与第十八章的内容,收获了了以下内容: 第一章: 计算系统的分层,明白了机器语言.汇编语言等之间的关系. 软件和硬件发展史.各个时期的原理与应用场景也有所不同 第一位程序员是Ada Lovelace,简要了解了其生平. 简要了解计算机使用者从系统程序员.应用程序员.计算机用户等之间的转变. 第十八章: 编码数.计算的限制. 计算机历史中引发了一些重大事故 掌握了图灵机与图灵. 2.学习中的问题 1.读第一章计算机史时,难免觉得有些乏味. 2.对前几代计算机的功能

2019-2020-1 20191315《信息安全专业导论》第二周学习总结

教材学习内容总结 第一章全景图学习到了计算系统和计算机硬件软件,明白计算系统可分为多个层次.计算的历史使我们了解到现代计算系统的演变发展过程,计算的历史被划分为四个时代,每个时代都以用于构建硬件的元件和为了让用户利用硬件而开发出软件工具为特征.并区分计算工具和计算学科. 第十八章计算的限制学习到了由于表示的数字有限以及算术运算的限制和精度问题,加上硬件部件的磨损会对计算带来限制.软件的大小和复杂度会产生错误,构建好的软件从项目一开始就关注质量,应用软件工程的规则.学习了问题的分类,了解图灵的生平

20191324《信息安全专业导论》第二周学习总结

教材学习内容总结 1.教材:本周主要学习了第一章和第十八章,了解了计算机硬件和软件的历史,了解现代计算机的来源和众多为计算机事业做出贡献的伟人,了解了图灵机和大O符号和不同软件的参考标准 2.自学是门手艺:阅读和自学能给我们带来很多东西,靠阅读学会一项新技能,(学好英语十分重要),学习新东西千万不要怕 教材学习中的问题和解决过程 问题:测试题里有很多问题看了教材也没找到,自己英语水平也有很大局限性,书本上一些没有的要靠自己找,不会在VS code上使用Python 解决过程:借助谷歌翻译读懂题目

2019-2020学年 20191217《信息安全专业导论》第九周学习总结

1.教材内容总结 本周学习了第十. 十一章<计算机科学与概论>了解了内存,进程,与cpu管理的概念,知道了什么是批处理,并明白了分时的意义.内存管理讲了单块内存管理,分区内存管理,页式内存管理的基本原理.之后又学习了进程管理,知道了不同进程是如何在电脑里切换的.之后学习了cpu调度有先到先服务 最短作业优先等不同类型.十一章学习了文件系统 文件类型 及文件操作,目录树的意义 磁盘调度的意义. 2.学习问题及解决 刚开始不知道为什么要讲这么多磁盘调度的方式 后来知道了二级io部分是计算机系统中最

2019-2020-1 20191230 《信息安全专业导论》第二周学习总结

教材学习内容总结: 只靠阅读就能习得新技能是拥有自学能力的终极目标.以前的观念“有些东西是书里面没有的”其实是书读的还不够多,只要书读的够多,所有问题几乎都能找到答案,但是读书不能只注重读书的数量,还要有选择的读书,放弃那些虚构的作品.知识是无国界的,不能因为语言不通就不去读原版书,版本不同的书给人的感受是不同的.互联网就是一本涉及广,内容新的一本书,通过它就可以了解到世界上的很多东西. 阅读要有策略,不能试图一下子就搞懂,了解一件事物的时候,首先要“脱盲”,先搞懂有关它的一些基本东西.学习一项

2019-2020-1 20191319《信息安全专业导论》第二周学习总结

教学内容总结: 第1章全景图了解了计算机和计算软件的发展历史,明白了计算系统可分为多个层次.计算机 由一个房间大小到现在一个手提包大小让我看到了科技发展的速度.第18章计算的限制让我明 白了什么是精度,有效位,表示误差,下溢,溢出,化零误差和大O符号.知道了算术运算有限制, 通信也有限制,大多数软件代码有错误. 教学学习中的问题和解决过程 问题1:算盘中部横木上为什么有两课珠子? 问题1解决方案:上网搜索发现是16进制用的. 问题2:2的64次方超级计算机为什么要算5年? 问题2解决方案:上网搜

2019-2020学年 20191327《信息安全专业导论》第九周学习总结

1.教材内容学习 了解了应用软件.系统软件.操作软件扮演的不同角色,学习了批处理的由来以及现在的应用,逻辑地址与物理地址的不同,固定分区法.动态分区法在不同与优劣,最先匹配.最佳匹配.最差匹配在不同个情况下应用的优劣情况,时间片的应用以及文件的类型和其不同名词代表的文件信息,目录树以及磁盘调度的学习与理解以及磁盘调度不同方式的优劣. 2.学习过程中的问题 问题:不清楚最先匹配是根据数据从大到小还是按照顺序 解决:通过查询网上信息 3.其他学习 1.按计划阅读<自学是门手艺> 2.学习网课 4.

2019-2020-1 20191232 《信息安全专业导论》第九周学习总结

教材学习内容总结 1.现代软件:应用软件(帮助我们解决现实世界问题).系统软件(管理计算机系统并与硬件进行交互) 2.内存管理: 三种技术的基本原理 单块内存管理 把应用程序载入一段连续的内存区域的内存管理方法 分区内存管理 固定分区法:把内存分为特定数目的分区以载入程序的内存管理方法 动态分区法:根据容纳程序的需要对内存分区的内存管理方法 页式内存管理 把进程划分为大小固定的页,载入内存时存储在帧中的内存管理方法 3.进程状态:创建状态.准备就绪状态.运行状态.等待状态.终止状态. 4.CPU