随笔分类 - 实验楼
实验楼里的项目
摘要:Linux 的 touch 命令用来修改文件时间戳,或者新建一个不存在的文件,使用方式如下: touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名) 本实验基于C语言实现Linux touch命令的 [-acm]选项。 注: touch file
阅读全文
摘要:我们使用互斥锁解决了多个线程的竞态条件问题。 互斥锁的一个主要特点是,谁先拿到锁先就可以优先访问共享资源,因此多个线程访问共享资源的互斥性是得到了保证,但是在某些场合可能还希望确保线程间执行的顺序。 如我们有一个共享内存数据资源M,我们整个程序设计需求是要求线程A在M上做了处理之后,线程B才能做处理
阅读全文
摘要:竞态条件 同一个进程的线程共享进程内的绝大部分资源,当一段访问这些共享资源的代码块,有可能被多个线程执行时,那么这段代码块就称为临界区。 当有多个线程并发的在临界区执行时,程序的执行结果会出现不确定性,这种情况称之为竞态条件。 实例: #include<stdio.h> #include<pthre
阅读全文
摘要:一个线程可以对另一个线程提出取消申请,即线程被动终止的一种情况。向某个线程提出取消申请的接口: #include <pthread.h> int pthread_cancel(pthread_t thread); 如果一个线程因响应pthread_cancel而终止的,那么连接该线程时,将得到PTH
阅读全文
摘要:一次性初始化: 假设有以下需求,在我们的多线程程序中,我们几乎同时创建了N个线程(我们无法知道哪个线程会被先执行),我们期望这N个线程中谁先运行谁就要去负责去调用一个全局的初始化函数做相关的初始化动作,而该初始化函数仅能被调用一次。 线程的一次性初始化函数正是为了解决上述问题而存在的,函数接口如下
阅读全文
摘要:线程创建 线程是操作系统能够进行调度运算的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程可以并行执行不同任务。 一个线程的生命周期起源于它被创建的那一刻,创建线程的接口: #include <pthread.h>
阅读全文
摘要:ls命令用来显示目标列表。 常用参数: -l :以长格式显示目录下的内容列表。输出信息从左向右依次包括文件名,文件类型,权限模式,硬连接数,所有者、组、文件大小和文件的最后修改时间等; -a :显示所有档案及目录; -r :以文件名反序排列并输出目录内容列表; -t :用文件和目录的更改时间排序;
阅读全文
摘要:/* mycp.c */ #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<dirent.h> #include<sys/types.h> #in
阅读全文
摘要:/* who_test.c */ #include<stdio.h> #include<string.h> #include<getopt.h> #include<time.h> #include<stdlib.h> #include<stdbool.h> #include<utmp.h> //设置
阅读全文
摘要:公共部分代码 /* common.h */ #ifndef COMMON_H #define COMMON_H #include <arpa/inet.h> #include <ctype.h> #include <dirent.h> #include <errno.h> #include <fcn
阅读全文
摘要:/* common.h */ /*服务器端口信息*/ #define PORTLINK ".charport" /*缓存限制*/ #define MAXNAMELEN 256 #define MAXPKTLENE 2048 /*信息类型钉钉*/ #define LIST_GROUPS 0 #defi
阅读全文
摘要:gethostname():返回本地主机的标准主机名 原型: #include<unistd.h> int gethostname(char *name, size_t len); 参数说明: name: 接收缓冲区,字节长度必须为len,或更长,存获取主机名 len: 接收缓冲区name的最大长度
阅读全文
摘要:socket函数 int socket(int protofamily, int type, int protocol); //返回sockfd,即描述符 功能: socket 函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而 socket() 用于创建一个 socket 描述
阅读全文
摘要:常见的网络拓扑 两台主机通信的过程:应用进程产生消息,经由主机的 TCP/IP 协议栈发送到局域网(LAN),最后经过广域网(目前最大的广域网的因特网)中的网络设备(路由器)传给目的主机所在的局域网(LAN),最后经过局域网(LAN)将报文传送个目的主机,经由主机 TCP/IP 协议栈处理,将消息递
阅读全文
摘要:/* * 文件名:mypwd.c * 描述: 实现简单的pwd命令 */ #include<stdio.h> #include<stdlib.h> #include<dirent.h> #include<sys/types.h> #include<sys/stat.h> #include<strin
阅读全文
摘要:Linux文件系统数如下: 在 Linux 系统中,文件系统通过目录"包含"子目录及文件的方式,来组织成一个树状结构。那么目录到底是如何"包含"其他目录及文件的呢? 目录,在 Linux 中,其实也是一种文件,所以它也是由“inode+数据块”构成的。而其文件内容是一个列表,每一个列表项记录“ino
阅读全文
摘要:一般情况下,每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ..)被格式化为文件系统后,都会有两部份,一部份是iNode,另一部份是Block。Block是用来存储数据用的,而iNode就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。 在 Linux 中的
阅读全文
摘要:版本1: 调用系统接口getcwd,实现路径打印。 实验结果:
阅读全文
摘要:命令的回显: 通常,make在执行命令之前都会把执行的命令进行输出,例如: 关闭命令回显有以下几种方式: 每个需要关闭回显的命令行之前加上”@”符号: 执行make时机上参数-s 或 –slient进制所有执行命令的显示。 在Makefile中使用没有以来的特殊目标时,.SLIENT也可以禁止所有命
阅读全文
摘要:多目标规则 多目标规则,可以简单的理解为是一种将多条具有1)相同依赖和2)相同生成命令的规则,合并成一条规则的语法,其基本格式为: targets...: prerequisites... commands ... 假设我们有以下makefile: 利用多目标规则,可以将makefile改写成mak
阅读全文