c语言
文章平均质量分 69
gudujianjsk
这个作者很懒,什么都没留下…
展开
-
用c解决约约瑟夫环问题
约瑟夫环 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列 ;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 一:一般解决法: #include #include int main(void) { int no; /*报数计数*/ int cou原创 2009-08-18 18:37:00 · 1110 阅读 · 1 评论 -
有关likely和unlikely
在linux中判断语句经常会看到likely和unlikely,例如:if(likely(value)){ }else{} 简单从表面上看 if(likely(value)) == if(value),if(unlikely(value)) == if(value)。也就是likely和unlikely是一样的,但是实际上执行是不同的,加lik转载 2012-07-31 10:02:28 · 480 阅读 · 0 评论 -
linux hook 初探
下面是一段代码可以实现系统调用的替换 linux 内部的系统调用 sys_mkdir :(code.c) 系统调用作为一个数组放在一个系统调用表sys_call_table之中, 由于sys_call_table在不同主机上的地址是不一样的。我们的直接赋值的办法是行不通的。那么我们就需要通过其他方式获取了。 具体的获取思路如下:每一个系统调用都是通过int 0x80中断进入核原创 2012-06-21 20:24:12 · 810 阅读 · 0 评论 -
提领指向不完全类型的指针 编译错误
gcc 下 编译程序时遇到错误提示 提领指向不完全类型的指针 ,通过分析发现原来是 没有声明结构体类型,错误提示的 一行代码是 : pskb->net . 其中pskb 是指向 skb_buff 类型的指针,但是没有包含声明 skb_buff 结构体的头文件,所以会报上面的错误!原创 2012-11-16 10:01:13 · 3743 阅读 · 0 评论 -
Linux下串口编程
老板让我研究一下UPS的控制,貌似在Linux下面没有相应的监控软件,UPS和电脑通信时候使用的是串口(RS232),所以先对Linux串口编程了解一下。因为只是设计串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯。串口操作需要的头文件:#include /*标准输入输出定义*/ #include /*标准函数库定义*/转载 2012-12-12 10:35:24 · 686 阅读 · 0 评论 -
那年,一步一步学linux c ---华为面试题之Variable
转载请注明出处:http://blog.csdn.net/muge0913/article/details/7313859华为面试题:程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。一点小总结: 1、关于堆栈,印象最深的就是在做uboot移植,在你准备进入c代码时,你必须给c代码一个良好的运行环境,其中重要的一项就转载 2012-12-19 20:27:29 · 623 阅读 · 0 评论 -
vmalloc设计的思考
0. vmalloc代码倒是不难,但是就不是不太明白它的设计思想。悲剧,到底是读代码 与 设计并写代码 差距就是很大,很难体会到设计者当初思维过程。我们只能从给出的文档以及源代码来逆向推断设计思路,感觉本末倒置了。有些细节及美妙灵感即使是读代码好几遍,也不如亲身去写一次考虑周全。 1.就从vmalloc来说,难得在ULK中找到点ideal:We already转载 2012-07-10 16:51:58 · 539 阅读 · 0 评论 -
阻塞进程(使用等待队列)
如果有人让你做你一时做不到的事情你会怎么办呢?如果你是个人被另一个人打扰,你唯一可以做的就是对他说:“现在不行,我很忙,走开!”但是如果你是内核模块,被进程打扰,你就有另一种选择。你可以让这个进程去挂起直到你可以为之提供服务。毕竟,进程是在不停的被内核挂起或唤醒(这就是多个进程看上去同时在一个处理器上运行的方法)。 这个内核模块就是一个这样的例子。这个文件(称作/proc/s转载 2012-06-21 14:33:00 · 1387 阅读 · 0 评论 -
c实现的求两个数的乘法逆元
定义:设a对b的乘法逆元是x则可以记为a*x=1 mod b,即a和x的积除以b的余数是1; 乘法逆元常用算法是欧几里德算法: //算法求d关于模f的乘法逆元d-1 ,即 d* d-1 mod f = 1 1 。(X1,X2,X3) := (1,0,f); (Y1,Y2,Y3) := (0,1,d) 2。 if (Y3=0) then return d-1 = n原创 2009-09-19 14:47:00 · 2273 阅读 · 0 评论 -
c语言中二维数组的问题
在论坛上看到一个关于二维数组讨论的帖子,觉得很有价值就整理了一下转帖了过来1)二维数组 参数传递 和二维数组的定义是一个道理。 二维数组声明时要求给定第二维下标。(同样,多维数组声明时要求给定除第一维外其他所有维的下标) 这是因为不管几维数组在内存中的存储和一维数组没有本质区别,都是线性存储的,长度是各个维下标之积。 程序运行时访问二维数组的转载 2009-11-04 14:10:00 · 2692 阅读 · 1 评论 -
c语言实现idea加密算法
IDEA数据加密算法及实现 作者:孤独剑 IDEA对称数据加密算法,是我写的第一个关于加解密方面的算法,在大学宿舍里弄了差不多将近二十个小时终于搞懂了。刚开始受到了“不良”资料的误导走了很长时间的弯路,后来在图书馆看到了正确的介绍才终于把这个算法给弄出来了。 1、 简介 IDEA,即国际数据加密算法 是旅居瑞士中国青年学者来学嘉和著名密原创 2009-11-04 13:46:00 · 8250 阅读 · 5 评论 -
求鞍点(acm)
Time Limit: 1000ms Memory limit: 65536kB 题目描述 输入一个二维 (5*5)数组,每行只有一个最大值,每列只有一个最小值。如果存在鞍点,则输出鞍点所在的位置(行和列),不存在鞍点时,要输出“not found”。鞍点指的是数组中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8原创 2009-12-11 21:31:00 · 1257 阅读 · 0 评论 -
内存管理模拟 队列相关
题目描述:内存分配Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 2831 Accepted: 650 Description 内存是计算机重要的资源之一,程序运行的过程中必须对内存进行分配。原创 2009-12-11 20:21:00 · 886 阅读 · 0 评论 -
线性代数 2:几个基本的矩阵处理函数
先讲一个最基本的矩阵变换函数以后的各种变换都要用到: /*由于元素为double类型故当与0或1比较式应当近似比较:*/#define N 0.000001#define Ng (N + 1)#define Nl (1 - N)lbian change_data(data *D ){ lbian count; lbian i,j,k,原创 2010-02-27 20:46:00 · 754 阅读 · 0 评论 -
线性代数 3:利用克拉默法则解方程组
a11*x1 + a12*x2 + a13*x3 + ........a1n*xn = b1;a21*x1 + a22*x2 + a23*x3 + ........a2n*xn = b2; (1-8) .................................an1*x1 + an2*x2 + an3*x3 + ........ann*xn = b原创 2009-10-08 12:44:00 · 9892 阅读 · 0 评论 -
线性代数 1:基本的数据类型和数据结构选择
线性代数中涉及到了矩阵和行列式。其中行列式的行列值是相等的但矩阵就不一定满足这个条件为了方便设计,可以将行列式看成是一种特殊的矩阵。既二者公用一个结构体类型。 /*基本数据类型*/typedef struct data{ lbian hang; /*行数*/ lbian lie; /*列数 */ datatype **top; /*指向行列式原创 2010-02-27 20:07:00 · 1021 阅读 · 0 评论 -
线性代数4:稀疏矩阵的十字链表表示法
十字链表为稀疏矩阵的没一行单独设置一个链表,同时也为每一列单独设置一个链表。这样稀疏矩阵的每一个非零元素就同时在两个链表中,即每一个非零元素同时包含在所在行的行链表中和所在列的列连表中。这就大大降低了链表的长度,方便了算法中行方向和列方向的搜索,因而大大降低了算法的时间复杂度。 其中i,j,value分别代表非零元素所在的行号,列号和相应的元素值;down和right分别称为向下指针和原创 2010-04-02 14:55:00 · 3403 阅读 · 0 评论 -
将一个目录下所有指定文件里面的特定字符串替换
想把自己以前完成的一个工程里面特定字符串替换,本来用脚本是很简单的,但是自己还不会只得用VC写了一个程序,蛋疼啊。程序涉及到知识点: 指针 链表 文件遍历 内存映射文件代码如下: // Test2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#inc原创 2012-06-05 09:20:06 · 1112 阅读 · 0 评论 -
测试ioctl函数
在linux设备驱动开发详解中源码:http://blog.csdn.net/gudujianjsk/article/details/7656042makefile 脚本:KVERS = $(shell uname -r)obj-m += globalmem.oEXTRA_CFLAGS=-g -O0build:kernel_moduleskernel_modules原创 2012-06-19 21:04:22 · 1037 阅读 · 0 评论 -
使用/proc测试
下面所示清单为一个简单的 /proc 使用范例,这段代码在模块加载函数中创建 /proc 文件节点,在模块卸载函数中撤销 /proc 节点,文件中保存了一个32位无符号整形值。#include #include #include static struct proc_dir_entry *proc_entry;static unsigned long val = 0x12原创 2012-06-19 19:16:39 · 749 阅读 · 0 评论 -
内核模块参数示例
我们可以用“module_param(参数名,参数类型,参数读/写权限)”为模块定义一个参数,例如下列代码定义了一个整型参数和一个字符指针参数:static char *book_name = "Linux Driver";static int num = 4000;module_param(num, int, S_IRUGO);module_param(book_na转载 2012-06-20 10:18:24 · 702 阅读 · 0 评论 -
替换 printk 函数
在实际应用中我们希望把消息送到任何一个 tty。这在内核模块被释放时确认错误是很重要的,因为它将会在所有内核模块中使用。这样做的方法是使用一个指向当前运行任务的指针,来得到当前任务的 tty 结构。然后,我们到 tty 结构里寻找一个指向写串函数的指针,我们用这个函数把一个串写进 tty。/* printstr.c - send textual output to the tty you'原创 2012-06-22 14:12:20 · 480 阅读 · 0 评论 -
迷宫问题两种算法
1)问题描述:给定一个M*N的迷宫图,求一条从指定入口到出口的路径。假设迷宫用下图表示。对于每一个方块空白表示通道,阴影表示墙。所求路径必须是简单路径,即在求得的路径上不能重复出现同一个通道块。2)数据组织:为了表示迷宫,设置一个数组mg,其中每一个元素表示一个方块的状态,为0是表示是通道,否则就不可走。为了算法方便,在一般的外面加了一道墙。上图所示的迷宫对应的数据组mg如下:byte m原创 2010-04-02 15:38:00 · 5085 阅读 · 3 评论