- 博客(22)
- 收藏
- 关注
转载 生产者与消费者模型
//生产者每提交一条消息到缓冲区中,就会通知消费者,等消费者取走消息之后才能提交下一条消息。同样,消费者也必须等待生产者提交一条消息后才能进行处理。这种设//计的效率是比较低下的。#include #include #include #include #include #include "SqQueue.h"//信号量和缓冲区struct data{ sem_t empty;
2017-08-17 20:08:28 230
原创 条件变量
假设有这样一种情况:线程正在等待共享数据内某个条件出现,这时必须先解锁,否则其他线程不可能更改共享数据。一种实现方式是,可以循环检测共享数据,但是在检测前要加锁,检测后又要解锁,这样效率会很低。 因此,在这种情况下,需要一种方法,使得当线程在等待某些条件的满足时进入睡眠状态,一旦条件满足,线程就应该被唤醒继续执行。这个方法就是使用POSIX条件变量。#include #inc
2017-08-17 20:06:20 192
转载 网络编程
1.创建socket2.命名套接字,绑定本地的ip地址和端口3.监听本地套接字4.接收连接#include #include #include #include #include #include #define PORT 9999int main(){ //1.创建socket int listen_socket = socket(AF_INET, SOCKET
2017-08-17 20:04:17 183
原创 请编写一个c函数,该函数给出一个字节中被置为1的位的个数
#include int func(int x){ int sum = 0; int i,y; for(i = 0; i<8; i++) { y = x%2; x = x>>1; if(y&1 == 1) { sum++; } } return sum;}int main(){ int x; printf("please input x :")
2017-08-17 19:59:49 477
原创 输入5个数(含负数、小数)将它们按由小到大的顺序排列起来
//这是一道以前我做过的题目,题目其实很简单,但是要用到排序的方法,这里直接用一个简单易懂的冒泡排序#include #define count 5int main(){ int i,j; float a[count]; printf("请输入五个数(可以是小数或负数):"); for(i=0;i<count;i++) { scanf("%f",&a[i]); } for
2017-08-11 20:59:17 1155
原创 获取进程ID
#include #include #include //这是一个最基础的关于获取进程ID的函数,里面用到的getpid函数大家可以去网上百度一下int main(){ printf("获取进程的 id: %d\n",getpid()); printf("获取父进程的id: %d\n",getppid()); printf("获取用户的 id: %d\n",getuid());}
2017-08-09 20:35:51 597
原创 利用文件知识写一个通讯录
//注意文件在主函数中插入的位置#include #include#include "friendadress.h"int main(){ Node *head = Create_List(); Friend data; if (head == NULL) { printf("创建链表失败\n"); return -1; } menu(); wh
2017-08-08 14:17:05 214
转载 系统调用
所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。 ... 进程控制 文件系统控制 内存管理 网络管理 用户管理 进程间通信 为什么用户程序不能直接访问内核提供的服务? 在Linux中,为了更好地保护内核空间,程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们
2017-08-07 09:06:54 204
原创 len函数
int Get_Len(Node * h){ if (h == NULL) return 0; Node *tmp = h; int count = 0; while (tmp->next) { count++; tmp = tmp->next; } return count;}
2017-08-07 08:59:49 4338 1
原创 停车场2.0
/*上次写的那个停车场项目,停车还有查看功能没有问题,但是在离开的时候还是有问题,今天晚上我又给完善了一下,下面就是我完善的部分,就是在离开的时候需要定义一个flag用来判断停车场是否有要离开的那辆车,其他的逻辑上很好想,大家看一下应该就明白了*/if(QueueEmpty(w)==TRUE) { int x; float t; int fla
2017-08-06 23:15:01 225
原创 随机分组
#include #include void swap(int *a, int i, int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}void printA(int *a, int len){ int i; for (i = 0; i { if (i % 4 == 0)
2017-08-06 20:51:15 797
转载 文件复制
int main(){ int fd1 = open("1.pptx",O_RDONLY); if(fd1 == -1) { perror("open fd1"); return -1; } int fd2 = open("2.pptx",O_WRONLY|O_CREAT,0777); if(fd2 == -1) { perror("ope
2017-08-06 18:44:57 155
原创 插入排序
#include//交换函数void swap(int *a,int i,int j){ int tmp=a[i]; a[i]=a[j]; a[j]=tmp;}void printA(int *a,int len){ int i; for(i=0;i { printf("%4d",a[i]); } printf("\n");
2017-08-06 09:00:16 146
转载 非递归后序遍历
void last2_order (BTreeNode *node){ if (node == NULL) { errno = ERROR; return; } LinkStack *Stack = Create_Stack (); BTreeNode *tmp = node; //指向当前节点 BTreeNode *pre = NULL; /
2017-08-05 14:35:19 254
转载 非递归中序遍历
void mid2_order (BTreeNode *node){ if (node == NULL) { errno = ERROR; return; } LinkStack *Stack = Create_Stack (); BTreeNode *tmp = node; //指向当前节点 while (tmp) { Push (S
2017-08-05 14:33:36 289
原创 二叉树的前序遍历
/*二叉树的前序遍历思想很简单,先建立一个栈方便我们在遍历二叉树的时候存储数据,然后开始前序遍历,找到根节点,输出,然后入栈,再找根节点的左孩子结点,继续输出,入栈,直到左孩子结点为空,左孩子结点都已经找完,然后出栈,接着找右孩子节点,进入刚才说的那个循环。*/void pre(BTreeNode *root){ if(root==NULL)
2017-08-05 14:31:27 224
原创 归并排序
//a是数组,tmp是缓冲区void merge(int *a,int left,int mid,int right,int *tmp){ int i=left; int j=mid+1; int k=0; while(i { if(a[i]>a[j]) tmp[k++]=a[j++]; else(a[i] tmp[k++]=a
2017-08-03 20:43:09 177
原创 排序算法
//这是一个关于快速排序的小程序,快速排序是找一个基准值和数组中其他的元素进行比较,小于他的放到基准值的左边,大于他的放到她的右边。所以程序的关键在于找一个基准值,也就是你找的一个用来和其他元素进行比较的值,我在这里找的是数组最后一个元素,当然找什么元素作为基准值看你个人喜好。找到基准值以后就需要把数组中的元素和他进行比较了,我建立一个partition()函数来进行进行分区操作,找基准值
2017-08-03 20:09:17 177
原创 头结点链表练习
//这是一份关于头结点链表的问题//完成一些基本的链表处理函数,包括插入,查找,删除,输出等一些功能的实现#include#include#include"linklist.h"Node *Creat_List(){ Node *list=(Node *)malloc(sizeof(Node)/sizeof(char)); if(list==N
2017-08-02 20:01:24 250
原创 停车场停车
//这是一个简单的停车场作业,#include"Parking.h"#includevoid menu(){ system("clear"); printf("***********************************************************************\n"); printf("*
2017-08-02 19:56:53 258
原创 指针
指针存储的是地址,地址有常量变量,函数等指针,存储的都是他们的地址。我觉得吧,在见到或者是用到这些指针变量的时候,直接记住这些指针都是地址,我们都是通过地址来改变的他们的值,这样改变过后无论在这个程序的哪里用到这些数据,都是用到这些被改变过后的数据。 另外,对于函数指针来说呢,其实就是把他们的函数名当作地址,这个函数的入口地址,不过我对于具体的使用上的细节还有些不太明白的地方,就不往
2017-07-21 19:05:53 142
转载 今天是第一次写博客,先写个小程序庆祝一下
这是一个简单的求输入的一个数有多少个9的小程序,也是照着百度上的写的。。。 #include int fun(int);int main(){int n,c;printf("请输入一个数: ");scanf("%d",&n);c = fun(n);printf("共有%d个9\n",c); return 0;}int fun(int n)
2017-07-11 22:16:53 186
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人