看了线程一个礼拜,我觉得最能考验知识就是这次实验题,让我知道了学习中很多的不足 一、进程原题 /* POSIX 下进程控制的实验程序残缺版 */ #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <signal.h> #include <ctype.h> /* 允许建立的子进程个数最大值 */ #define MAX_CHILD_NUMBER 10 /* 子进程睡眠时间 */ #define SLEEP_INTERVAL 2 int proc_number=0; /* 子进程的自编号,从0开始 */ void do_something(); int main(int argc, char* argv[]) { /* 子进程个数 */ int child_proc_number = MAX_CHILD_NUMBER; int i, ch; pid_ 继续阅读 >>


陈文浩 17/08/06 14:59:15
上周看了看了进程,这周看了线程,我觉得最能区别两者不同的就是楚东方学长讲firefox是线程管理,chrome是进程管理的,线程是共用地址空间,所以会比进程切换速度更快 一、线程的创建 #include<pthread.h> int pthread_create(pthread_t *thread,pthrad_attr_t *attr,void*(*start_routine)(void *),void*arg) 参数 含义 thread 指针,当线程成功创建的时候,返回创建线程ID attr 用于指定线程的属性,NULL为默认属性 start_routine 函数指针,指向线程创建后要调用的函数 arg 该参数指向传递给线程函数的参数 线程创建成功,函数返回0,记得gcc的时候加-lpthread 函数 含义 pthread_t pthread_self(void) 获取本线程的线程ID int pthread_equal(p 继续阅读 >>


陈文浩 17/08/06 11:39:55
/* * 大学生活十分滋润,每天晚上的夜生活更是令人向往,然而在一个丰富的夜生活过后,第二天却不得不面对在课堂上睡觉这种非常惬意但是又惊心动魄的事情。 * * 在一堂高数课上,刚刚经历“夜生活”的n名大学生十分困倦,想要趁机睡觉,然而他们又害怕被老师发现,扣除平时分,所以他们想出了一个策略,就是每听a分钟的课,睡b分钟。然后再听a分钟的课,再睡b分钟,以此类推。我们将这样a+b构成的时间称之为一个周期。 * * 但是!他们都很胆小,害怕睡觉的人数太少,被抓住之后被当成典型来杀鸡儆猴,所以他们在每次准备睡觉的时候,都会再看一下现在睡觉的人数是否大于清醒的人数(哪怕睡觉的人数和听课的人数相等也不敢睡觉),只有在这个时候他才可以放心大胆的睡觉。否则他们会选择再等a分钟看看是否满足条件。 * * 现在请你写出一个程序,来求出经过多少时间之后,所有学生都在清醒状态。 * Input * 输入有多组。 * * 每组数据的第一行是一个整数n(0 <= n <= 10),代表高数课上有n名学生。若n为0,则代表输入结束,你什么都不必输出。 继续阅读 >>


陈文浩 17/08/02 23:11:45
Description 整天待在方块里的骑士感到特别的无聊,于是他决定来一场说走就走的旅行。 然而他只能走日字,如右图所示,如果骑士当前在棋盘的正中央,他可以走标记有白点的八个区域。 骑士知道世界是一个列数和行数均不超过8(即8×8)的棋盘。 并且骑士有一点强迫症,如果用A-Z来表示列,1-99来表示横行,他只愿意走字典序最小的一条道路。 你能帮助勇敢的骑士制定一个适合他的旅行计划,使得他可以走遍整个棋盘吗?骑士可以在任一方块出发或者结束。 Input 第一行中有一个正整数n,代表数据有n组。 对于每组数据,都含有两个正整数p和q(1 <= p * q <= 26),代表棋盘有p行q列。 Output 每组数据首先应当输出”Scenario #i:”,i代表输出的是第i组数据的结果。 然后在一行之内输出一条可以走遍棋盘的路径,如果有多条路径可以走遍棋盘,那么输出按字典序排序第一的路径。 最后,留一个空行。若现在是最后一条数据,则不留空行。 在输出路径时,用A代表第一列,B代表第二列..以此类推。而使用1代表第一行,2代 继续阅读 >>


陈文浩 17/07/31 22:48:19
#include<stdio.h> #include<string.h> #include<pwd.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> #include<sys/wait.h> #include<fcntl.h> #include<dirent.h> #include<readline/readline.h> #include<readline/history.h> #include<signal.h> #define PIPE 1 #define IN 2 #define OUT 4 #define OUTAPP 16 int get_param(char *,char (*str)[256]); void explain_param(char (*str)[256],int *param,int k);//解释参数 int 继续阅读 >>


陈文浩 17/07/30 13:52:21
一、linux进程结构 代码段:存放可执行代码 数据段存放程序的全局变量、常量、静态变量 堆栈段用于存放动态分配的内存变量 二、创建进程 1.fork #include<stdio.h> #include<unistd.h> pid_t fork(void); fork有两个返回值 - fork成功调用之后实际分为两个进程,一个是父进程调用fork后返回值是刚才创建的子进程的ID - 另一个是子进程fork函数的返回值0 #include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> int main() { pid_t pid; char *msg; int k; printf("process creation study\n"); pid=fork(); switch(pid) { 继续阅读 >>


陈文浩 17/07/30 13:43:08
受到宫学长讲座的启发,学到不少的排序方法,所以也想记下来总结一下。所有排序默认都是从大到小排序 冒泡排序的优化 #include<stdio.h> void swap(int *a,int *b) void bubble1_sort(int *a,int len); void bubble2_sort(int *arr,int n); void bubble3_sort(int *arr,int len); int main()//立flag优化 { int a[]={10,9,8,7,6,5,4,3,2,1}; bubble3_sort(a,10); for(int i=0;i<10;i++) printf("%d ",a[i]); putchar('\n'); } void bubble1_sort(int *a,int len) { int flag=1; for(int i=0;i<len&&flag;i++) { f 继续阅读 >>


陈文浩 17/07/26 23:24:36
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 Output 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。 Sample Input 2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 Sample Output 2 1 思路就是变每一行,从行入手,每次到一行就遍历一次全部列,如果列没有标记,就标记,并且计数一次 #in 继续阅读 >>


陈文浩 17/07/26 23:10:23
勉强完成了这周的小项目,经历了无数次的改buf,写的不是很好,但是还是完成了基本功能,还是很开心的,这次写项目也学到很多东西,再接再厉!!! #include<stdio.h> #include<string.h> #include<stdlib.h> #include<stdlib.h> #include<time.h> #include<sys/stat.h> #include<unistd.h> #include<sys/types.h> #include<limits.h> #include<dirent.h> #include<grp.h> #include<pwd.h> #include<errno.h> #define PARM_NONE 0 #define PARM_A 1//将参数定义好 #define PARM_L 2 #define PARM_R 4 #define MAXLEN 继续阅读 >>


陈文浩 17/07/23 22:32:22
一、插入,删除 1.基本知识 num=['1','2','3','4'] #这个就是列表 >>>print(num[0]) 1 >>>print(num) ['1','2','3','4']  >>>print(num[-1])#表示列表的最后一个元素 4 2.修改元素 num[0]='change' num=['change','2','3','4']  3.添加元素append >>>num.append('5')#在尾部添加元素 4.插入元素insert sum=['0','1'] >>>sum.insert(2,'2')#二表示第二个位置 sum=['0','1','2'] 5.del删除语句 sum=['0','1'] >>>del sum[0] sum=['1'] 6.pop删除元素 ①只有pop( )删除尾部元素 sum=['0', '1',‘2’,'3'] >>>sum.pop() sum=[ 继续阅读 >>


陈文浩 17/07/23 22:15:43