![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
课堂笔记
文章平均质量分 54
xxaichishizi
这个作者很懒,什么都没留下…
展开
-
链表中间删除
#include #include struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void insert_node_head(Lin原创 2016-11-03 22:01:58 · 192 阅读 · 0 评论 -
register,static,const
关键字之register,static,constregister:寄存器类型变量(运用于使用频率高的变量)使用注意:register修饰变量的类型必须是CPU所接受的。 register变量可能不在内存中存储,所以不能使用&来取地址 register不可定义为静态 static:静态函数:作用于它的源文件,只有本文件内才能调用,函数原创 2016-10-24 23:29:35 · 394 阅读 · 0 评论 -
volatile,extern,struct,union,enum
关键字之volatile,extern,struct,union,enum volatile作用:1.不会在两个操作之间把volatile变量缓存在寄存器中(变量可能在其他程序被改变)2.不做常量合并、常量传播等优化。3.对volatile变量的读写不会优化掉。 extern:外部声明extern不是用来定义,是用来声明作用:扩展适用范围表明变量或函数的定义原创 2016-10-25 10:49:21 · 575 阅读 · 0 评论 -
链表中间插加强版
#include #include struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void insert_node_head(Lin原创 2016-11-06 20:53:23 · 217 阅读 · 0 评论 -
有关shell
有关shellshell:确切的说,shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用shell启动、挂起、停止甚至是编写一些程序。shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它互原创 2016-10-16 13:50:31 · 233 阅读 · 0 评论 -
有关shell(2)
1.shell的变量:变量名=值(“=”两边不能有空格)取出变量值需要在变量前加$例题: #!/bin/sh a="helloworld" echo "Ais:" echo $a2.默认变量$#:传入脚本的命令行参数个数$*:所有命令参数值,在各个参数值之间留有空格$0:命令本身(shell文件名)$1:第一个原创 2016-10-16 16:25:51 · 203 阅读 · 0 评论 -
带头结点的链表
#include #include struct student{ int num; struct student * next;};typedef struct student STU;typedef struct student * Link;void create_newnode(Link *newnode);void create_link(Link *head);原创 2016-11-07 16:19:35 · 219 阅读 · 0 评论 -
C语言基本数据类型
C语言1.基本数据类型 变量:内存的映射(变量是对程序中数据的存储空间的抽象)。 2.数据类型说明符号a.printf()函数*功能:向终端输出若干个任意指定类型的数据*格式:printf("格式控制",参数列表);*输出函数控制字符: d,i 十进制整数 x,X 十六进制无符号整数 o 八进制无符号整数 u 不带符号十进制整数原创 2016-10-17 19:30:05 · 217 阅读 · 0 评论 -
双向循环链表
#include #include struct dblnode{ struct dblnode * prior; int num; struct dblnode * next;};typedef struct dblnode Dblnode;typedef struct dblnode * Dbllink;void create_dbllink(Dbllink *hea原创 2016-11-09 13:26:34 · 205 阅读 · 0 评论 -
链表之头插
#include #include struct node //定义结点的结构{ int num; //数据域 struct node * next;//指针域};typedef struct node Node;//给结构体命名为Nodetypedef struct node * link;//给指向结构体的指针命名为linkvoid create_link(link原创 2016-10-31 00:22:58 · 248 阅读 · 0 评论 -
链表尾插
#include #include struct node //定义结点的结构{ int num; //数据域 struct node * next;//指针域};typedef struct node Node;//给结构体命名为Nodetypedef struct node * link;//给指向结构体的指针命名为linkvoid create_link(link原创 2016-10-31 13:03:34 · 353 阅读 · 0 评论 -
文件编程——复制
#include #include int main(){ FILE *ffp; FILE *tfp; char ch; if((ffp = fopen("a.txt","r")) == NULL) { printf("Cannot open file!\n"); exit(0); } if((tfp = fopen("b.txt","w+")) == NULL)原创 2016-11-12 23:12:51 · 362 阅读 · 0 评论 -
数据库制表
#include #include #include int create_table(sqlite3 *db){ char *errmsg = NULL; char *sql; sql = "create table if not exists mytable (id integer primary key,name text);"; if(SQLITE_OK != sql原创 2016-11-13 22:12:19 · 554 阅读 · 0 评论 -
链表之中间插入
#include #include struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void insert_node_head(Lin原创 2016-11-02 16:50:53 · 373 阅读 · 0 评论 -
pthread_struct
#include #include #include #include struct menber{ int a; char *s;};void *create(void *arg){ struct menber *temp; temp=(struct menber *)arg; printf("menber原创 2016-12-01 09:59:08 · 179 阅读 · 0 评论 -
消息队列小实例二
#include #include #include #include #include #include #include #include struct msg_buf { int mtype; char data[255]; }; int main(){ key_t ke原创 2016-12-10 22:24:37 · 168 阅读 · 0 评论 -
rcv_msg
#include #include #include #include #include #define BUFSZ 4096struct msg{ long msg_types; char msg_buf[512];};int main(int argc,char ** argv){ int qid; int len; struc原创 2016-12-14 19:23:05 · 347 阅读 · 0 评论 -
买票简易版
三个售票口买十张票#include #include #include #include int ticket = 10;void *sell_ticket1(void){ while(1) { if(ticket > 0) { //sleep(1); printf("sell ticket--> chool ticket1原创 2016-12-02 20:36:39 · 203 阅读 · 0 评论 -
vfork小实例
#include #include #include int main(){ pid_t pid; int count = 0; pid = vfork(); if(pid == 0) { count++; printf("count = %d\n",count); exit(0); } else { count++; printf("count =原创 2016-11-21 12:33:39 · 300 阅读 · 0 评论 -
pthread_struct
#include #include #include #include struct menber{ int a; char *s;};void *create(void *arg){ struct menber *temp; temp=(struct menber *)arg; printf("menber原创 2016-12-03 11:01:28 · 190 阅读 · 0 评论 -
signal_test
#include #include #include #include void myfunc(int sign){ if(sign == SIGINT) { printf("hello world!\n"); } if(sign == SIGQUIT) { printf("exit!\n"); exit(1);原创 2016-12-12 19:53:17 · 239 阅读 · 0 评论 -
pipe小实例
#include #include #include #include #include int main(){ int fd[2]; pid pid_t; char r_buf[100]; char w_buf[100]; int r_num; memset(r_buf,0,sizeof(r_buf)); memset(w_buf,0,sizeof(w_buf));原创 2016-11-22 13:01:20 · 262 阅读 · 0 评论 -
网络编程,client,server初始版
客户端#include #include #include #include #include int main(int argc,char **argv){ int sockfd; int n; struct sockaddr_in servaddr,cliaddr; char sendline[1000]; char recvline[1000]; if(argc原创 2016-12-05 12:59:49 · 271 阅读 · 0 评论 -
有关文件的小练习题
int main(){ FILE *fp1; FILE *fp2; FILE *fp3; char ch1; char ch2; char ch3; if((fp1 = fopen("text1.txt","r")) == NULL) { printf("file is error!\n"); exit(0); } if((fp2 = fopen("text2.t原创 2016-11-23 14:21:05 · 403 阅读 · 0 评论 -
udp服务器、客户端
客户端#include #include #include #include #include int main(int argc,char **argv){ int sockfd; int n; struct sockaddr_in servaddr,cliaddr; char sendline[1000]; char recvline[1000]; if(arg原创 2016-12-06 18:46:29 · 155 阅读 · 0 评论 -
msg_port_full
#include #include #include #include #include #include #include #include struct msg_buf { int mtype; char data[255]; }; int main(){ key_t ke原创 2016-12-13 16:39:15 · 333 阅读 · 0 评论 -
thread_share
#include #include #include //static int a=4;int a = 1;void *create(void *arg){ printf("new pthread ... \n"); printf("a=%d \n",a); return (void *)0;}int main(int原创 2016-12-07 13:13:56 · 214 阅读 · 0 评论 -
thread_exit
#include #include #include void *create(void *arg){ printf("new thread is created ... \n"); return (void *)8;}int main(int argc,char *argv[]){ pthread_t tid; int原创 2016-12-08 20:14:08 · 1381 阅读 · 0 评论 -
消息队列小实例
#include #include #include struct msg_buf { int mtype; char data[255]; }; int main(){ key_t key; int msgid; int ret; struc原创 2016-12-09 22:17:27 · 292 阅读 · 0 评论 -
shm_comm.c
#include #include #include #include #include #include #define BUFFER_SIZE 2048int main(){ pid_t pid; int shmid; char *shm_addr; char flag[]="parent"; char buff[BUFFER_SIZ原创 2016-12-15 21:58:14 · 288 阅读 · 0 评论 -
shmem
#include #include #include #include #include #include #include #include #include #define PERM S_IRUSR|S_IWUSR/* 共享内存 */int main(int argc,char **argv) { int shmid; char *p_addr,*c_add原创 2016-12-16 19:20:24 · 1051 阅读 · 0 评论 -
多进程编程的优缺点
多进程优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 通过增加CPU,就可以容易扩充性能; 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大 多线程缺点:逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据转载 2017-01-02 22:50:40 · 262 阅读 · 0 评论 -
signal_test.c
#include #include #include #include void myfunc(int sign){ if(sign == SIGINT) { printf("hello world!\n"); } if(sign == SIGQUIT) { printf("exit!\n"); exit(1);原创 2016-12-22 22:58:55 · 274 阅读 · 0 评论 -
shmread
#include #include #include #include #include "shmdata.c"#include int main(){ int running = 1; void *shm = NULL; struct shared_use_st * shared; int shmid; shmid = shmg原创 2016-12-17 22:47:47 · 283 阅读 · 0 评论 -
TCP三次握手
TCP是如何保证数据可靠传输TCP为应用程序提供可靠的通信连接,因为他采用了三次握手协议,三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互。第一次握手:客户端发送SYN包到服务器,并进行SYN_SEND状态,等待服务器确认;第二次握手:服务器收到SYN包并确认,同时自己发送一个SYN+ACK包,此时服务器进入SYN_RECV状态第三次握手转载 2016-12-24 22:52:55 · 176 阅读 · 0 评论 -
链表与数组的区别
二者都属于一种数据结构从逻辑结构来看1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素原创 2016-12-25 21:22:54 · 204 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别: 一、堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二、堆栈缓存方式区别: 1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放; 2原创 2016-12-26 22:46:17 · 221 阅读 · 0 评论 -
shmwrite.c
#include #include #include #include #include "shmdata.c"#include #define BUFFSIZE 2048int main(){ int running = 1; void *shm = NULL; struct shared_use_st * shared = NULL; cha原创 2016-12-19 19:44:14 · 263 阅读 · 0 评论 -
TCP和UDP
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主原创 2016-12-27 21:27:24 · 177 阅读 · 0 评论 -
什么是程序死锁,如何预防
在并发程序设计中,死锁 (deadlock) 是一种十分常见的逻辑错误。通过采用正确的编程方式,死锁的发生不难避免。 死锁的四个必要条件在计算机专业的本科教材中,通常都会介绍死锁的四个必要条件。这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生。我们来复习一下,这四个条件是:•互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执转载 2016-12-28 10:35:48 · 501 阅读 · 0 评论