04 2013 档案
摘要:指针是c语言的一大利器,可以用他直接对内存进行操作;最近犯了一个大的错误:试图向函数传递一个指针参数,返回函数内部分配的对象的地址;实验证明这种用法是错误的;正确的用法是:把该指针的地址传递给函数,即使用指针的指针,然后用指针的间接引用符‘*’,直接对该指针的内存进行操作;总结如下:1.对基本的数据类型(int,char),可以直接传递指针给函数,用*+地址,直接对该内存进行操作;2.对指针的类型,如果想对指针赋值,改变该指针的内容,则须用指向指针的指针;对该地址进行操作;分析代码如下:#include <stdio.h>#include <stdlib.h>typed
阅读全文
摘要:/tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory出现这类错误表示,系统不知道xxx.so放在哪个目录下,这时候就要在/etc/ld.so.conf中加入xxx.so所在的目录。一般而言,有很多的so会存放在/usr/local/lib这个目录底下,去这个目录底下找,果然发现自己所需要的.so文件。所以,在/etc/ld.so.conf中加入/usr/local/lib这一行,保存之后,再运行:/sbin/ldconfig
阅读全文
摘要:OpenCV是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式Linux环境上。本文介绍了OpenCV交叉编译的基本步骤。一、编译环境及库文件linux环境:fedora14交叉编译:4.5.1arm板子:tiny6410libz: zlib-1.2.7libjpeg: jpegsrc.v7libpng: libpng-1.5.10libyasm: yasm-1.2.0opencv: opencv-2.4.2libx264: x264-snapshot-20120608-2245libxvid: xvidcore-1.3.2lffmpeg: f...
阅读全文
摘要:一.线程属性线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。1.名称:pthread_attr_init/pthread_attr_destroy功能:对线程属性初始化/去除初始化头文件:#include <pthread.h>函数原形:int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t
阅读全文
摘要:线程的最大特点是资源的共享性,但资源共享中带来了对共享资源的竞争问题;解决竞争问题的途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享资源的时候,他她的指向单元被禁止访问,以保证线程之间同步进行;同步是了保证在同一个时刻只有一个线程对资源进行操作,linux下提供了多种方式来处理线程同步,最常用的是互斥锁,条件变量和信号。互斥量:互斥量用pthread_mutex_t 数据类型来表示;操作函数集如下所示://该函数初始化一个互斥体变量,如果参数attr 为NULL,则互斥体变量mutex 使用默认的属性。int pthread_mutex_init(pthread_mute
阅读全文
摘要:自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性、效率。本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的。一.基础知识:线程和进程按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。无论按照怎样的分法,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等)
阅读全文
摘要:关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。一. Linux内核对多进程和多线程的支持方式Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参
阅读全文
摘要:每个进程都有他自己当前的工作目录和它自己的根目录。这是内核用来标识进程与文件系统相互作用做必须维护的数据;每个进程的fs字段指向进程的fs_struct结构;struct path { struct vfsmount *mnt; struct dentry *dentry;};/include/linux line6struct fs_struct { int users; // 共享这个表的进程个数 rwlock_t lock; //用于表中字段的读写自旋锁 int umask; //打开文件设置文件权限是所使用的位掩码 int in_exec; struc...
阅读全文
摘要:linux/fs/open.cSYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode){ long ret; if (force_o_largefile()) flags |= O_LARGEFILE; ret = do_sys_open(AT_FDCWD, filename, flags, mode); /* avoid REGPARM breakage on x86: */ asmlinkage_protect(3, ret, filename, flags, mod...
阅读全文
摘要:在浏览 /proc 目录的时候您会发现许多目录的名称是一些数字。这些目录保存了当前系统中运行的所有进程的信息。$ ls -d /proc/[0-9]*/proc/1/ /proc/302/ /proc/451/ /proc/496/ /proc/556/ /proc/633//proc/127/ /proc/317/ /proc/452/ /proc/497/ /proc/557/ /proc/718//proc/2/ /proc/339/ /proc/453/ /proc/5/ /proc/558/ /proc/755//proc/250/ /pr...
阅读全文
摘要:1.current的应用current 指针指向当前在运行的进程,内核代码可以通过使用 current 来使用进程特定的信息。指向 task_struct 的current指针在内核堆栈内,是一个全局项。定义:/arch/x86/include/asm/current.h #define current get_current()应用目的:查看当前谁在使用内核你关心的那段代码的时候。应用方法:printk(KERN_INFO "The cuurent process commond : \"%s\" the pid :%i\n", current->
阅读全文
摘要:super_block:存放已安装文件系统的信息;记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式不相关信息等struct super_block { struct list_head s_list; /* Keep this first */ dev_t s_dev; /* search index; _not_ kdev_t */ unsigned long s_blocksize; unsigned char s_blocksize_bits; unsigned char s_dirt; unsigned lon...
阅读全文
摘要:简介:良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会 受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab 分配器背后所采用的思想,并介绍这种方法提供的接口和用法。动态内存管理内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:最小化管理内存所需的时间最大化用于一般应用的可用内存(最小化管理开销)内存管理实际上是一种关于权衡
阅读全文
摘要:1.sysf文件系统的全局变量static struct vfsmount *sysfs_mount;struct super_block * sysfs_sb = NULL;struct kmem_cache *sysfs_dir_cachep;2. 文件系统类型:file_system_typefs/sysfs/symlink.cstatic struct file_system_type sysfs_fs_type = { .name = "sysfs", .get_sb = sysfs_get_sb, .kill_sb = kill_...
阅读全文

浙公网安备 33010602011771号