条件变量是利用线程间共享的全局变量进行同步的一种机制,条件变量主要包括两个动作 1:等待使用资源的线程等待条件变量为真时启动; 2:另一个线程在使用完资源后将条件设置为真, 而条件变量的保护一般用互斥锁来保护. 如下例子: /*************************************************************** File Name: condition3.c Author:motian Mail:765885195@qq.com Created Time: 2016年08月01日 星期一 16时26分36秒 **************************************************************/ #include<stdio.h> #include<pthread.h> #include<stdlib.h> void *thread1(void *); void *thread2(void * 继续阅读 >>


宫展京 16/08/01 17:17:28
昨天在测试一道题时,突然发现的,然后在网上找,发现这个问题还是挺重要的,为以后学习打下基础. int main() { pid_t pid; pid=fork(); //1 pid=vfork(); //2 if(pid<0) { printf("error"); } if(pid>0) { .... exit(0); } if(pid==0) { .... exit(0); //3 return 0; //4 } } 上述代码很简单就只是用fork/vfork来创建了个进程,但结束子进程方式有两种return /exit(); 我们知道让进程正常退出的方法有return/exit()/_exit() 继续阅读 >>


宫展京 16/07/28 10:54:14
linux下系统调用fork()是创建一个进程的唯一方法(vfork()函数其实是对fork()函数的一种封装) 除了极少数以特殊方式创建的进程如init进程,该进程是内核启动时创建的. 前面讲到过vfork()其实就是对fork()的一种封装; fork与vfork 两个都是创建一个进程,但区别在哪里呢? 1, fork()创建的子进程,是几乎继承了父进程(创建他的进程)的全部资源如:共享的存储段,用户ID,组ID,上下文环境,资源限制,当前目路……等;但子进程的执行不影响父进程的数据. 而vfork()则是共享父进程的数据段,既就是子进程对同一变量的修改,会传递给父进程; 2; fork()创建的子进程与父进程的执行顺序取决于系统的调度算法,是, 而vfork()则是保证了先是子进程运行,当他调用exec或exit后,父进程才可能被调度运行,如果在调用exec或exit之前子进程要依赖父进程的某个行为,则会导致死锁 未完…. 继续阅读 >>


宫展京 16/07/25 09:41:23
主体思路就是,先用readdir()函数获取输入的目录下的所有子目录和文件的名在加以补全,然后在用stat()函数打开文件,获取文件的详细信息,实现代码如下: #include<stdio.h> #include<time.h> #include<unistd.h> #include<sys/stat.h> #include<sys/types.h> //不完全,缺少容错性,及链接显示问题和执行权限x #include<stdlib.h> #include<grp.h> #include<pwd.h> #include<string.h> #include<dirent.h> #include<stdlib.h> //a 显示隐藏文件 //l 显示详细信息 //R 显示详细目录 //i 显示节点索引 //n 将用户 继续阅读 >>


宫展京 16/07/25 08:27:23
文件系统是文件存放在磁盘等存贮设备上的组织方法。 linux则采用的是VFS文件系统——可以支持多种不同的文件系统如EXT2,EXT3,也支持windows的vfat; 而linux则是则通过树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。 主要有以下几个方面: /bin 二进制可执行命令  /dev 设备特殊文件  /etc 系统管理和配置文件   /etc/rc.d 启动的配置文件和脚本  /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示  /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件  /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序  /tmp 公用的临时文件存储点  /root 系统管理员的主目录(呵呵,特权阶级)  /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。  /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk) 继续阅读 >>


宫展京 16/07/24 11:19:35
1> define宏: (1)是在预处理阶段展开; (2)没有数据类型,不做任何类型检查; (3)可调试; (4)不分配内存,在程序中有几次替换就分配几次内存。 const常量: (1)是编译运行阶段使用; (2)有具体的数据类型,执行类型检查; (3)不能调试; (4)分配内存,对应一个内存地址,但不重复分配内存。 2> malloc分配二维数组时如果两次分配 int **a a=(int **)malloc(n*sizeof(int *)); /*第一维分配元素个数为n的指针数组, 用来存放第二维数组每行的首地址 */ for(i=0;i<n;i++) a[i]=(int *)malloc(m*sizeof(int)); //给第二维的每个数组分配m个大小的int空间 这样分配的结果会让每行的地址不连续 二维数组本质还是一维数组所以也可以一次分配 int *a a=(int *)malloc(m*n*sizeof( 继续阅读 >>


宫展京 16/05/30 14:34:14