随笔分类 -  第一个Linux下的C项目

Linux重零开始
[转]ubuntu12.04没有/var/log/messages解决
摘要:编辑/etc/rsyslog.d/50-default.conf其中有这么一段*.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages保存后重... 阅读全文

posted @ 2014-06-03 10:58 yuanqing 阅读(218) 评论(0) 推荐(0)

fork多个子进程 二
摘要:目的:主进程fork多个子进程 效果是方法一:直接看代码 for循环voidcreatesubprocess(intnum){pid_tpid;inti;for(i=0;i=max)return;pid=fork();if(pid<0){perror("forkerror!\n");exit(1);}//子进程elseif(pid==0){sleep(3);printf("子进程id=%d,父进程id=%d\n",getpid(),getppid());}//父进程else{num++;if(num==1)printf("父进程id=%d 阅读全文

posted @ 2014-04-10 11:34 yuanqing 阅读(499) 评论(0) 推荐(0)

VMware虚拟机配置Ubuntu桥接方式(Bridged)
摘要:1、设置Bridged上网方式Vmware菜单栏VM->settings->Network Adapter2、查看Bridged状态Vmware菜单栏Edit->Virtual Network Editor要设置成以上bridged模式,先关闭虚拟机,不关闭设置会提示"只有虚拟机在power off状态才能设置",选择VMnet0,点击左下角的Restore Default,等一段时间虚拟机配置好虚拟网卡后选择Bridged,Bridged to--选择自己现在主机的实际网卡名,然后点击应用确定。3、配置Bridged的IP、DNS查看宿主机IP: 参考宿 阅读全文

posted @ 2014-02-26 16:07 yuanqing 阅读(1023) 评论(0) 推荐(0)

LINUX共享内存使用常见陷阱与分析(转)
摘要:所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数据处理过程中内存的消耗,但是共享内存的使用中有很多的陷阱,一不注意就很容易导致程序崩溃。 1.超过共享内存的大小限制? 在一个linux服务器上,共享内存的总体大小是有限制的,这个大小通过SH... 阅读全文

posted @ 2014-02-21 20:15 yuanqing 阅读(498) 评论(0) 推荐(0)

Ubuntu 10怎样在VMware中按装Vmware tool及如何全屏(转)
摘要:首先,在 vmware 菜单栏中选择 虚拟机----vmware tools----安装VMware Tools,在弹出的对话框中选择“安装”。这时,在Ubuntu下会自动加载Linux版的VMware Tools的安装光盘镜像。你会看到虚拟机的桌面上出现了一个名为VMware Tools的光盘图标。双击,其中包括两个扩展名为.rpm和.tar.gz的文件。.rpm文件是给Red Hat准备的,我们只需要.tar.gz的那个。第二,将扩展名为.tar.gz的文件拷贝到桌面,鼠标右键单击,选择 解压(提取)到此处第三,执行Ubuntu桌面左上角的Applications——附件 ——终端第四,具 阅读全文

posted @ 2014-02-19 11:26 yuanqing 阅读(303) 评论(0) 推荐(0)

linux下使用共享存储编程初试 (转载)
摘要:设计一个C/S结构的程序,在开辟的一片共享内存中读写程序,server端负责写数据(每次写一个长度为100的数组),client端负责读数据,并把100个数组的元素以tab符号分割的输出到一个文件中。在不使用任何锁和信号量的情况下完成数据读写的同步(既server在对数组中元素赋值的过程中,client端绝对不能读)。解决思路: 首先,在不加锁的情况下,为同步数据的读写,共享内存多申请一个int变量,作为数据读写权限的标志位(0-空闲,此时生产者可写,1-繁忙,两者均不能访问,2-新数据,此时消费者可读);Server/Client在读取标志位判断自己得到权限后首先应该修改标志位以告诉对方自己 阅读全文

posted @ 2014-01-19 16:26 yuanqing 阅读(607) 评论(0) 推荐(0)

linux信号量
摘要:1.1 创建信号量int semget( key_t key, //标识信号量的关键字,有三种方法:1、使用IPC——PRIVATE让系统产生, // 2、挑选一个随机数,3、使用ftok从文件路径名中产生 int nSemes, //信号量集中元素个数 int flag //IPC_CREAT;IPC_EXCL 只有在信号量集不存在时创建)成功:返回信号量句柄失败:返回-11.2 使用ftok函数根据文件路径名产生一个关键字key_t ftok(const char *pathname,int proj_id);路径名称必须有相应权限key_t key;key = ftok(".& 阅读全文

posted @ 2014-01-18 20:43 yuanqing 阅读(362) 评论(0) 推荐(0)

共享内存能否存放带有指针的结构体?
摘要:共享内存是第二种IPC工具。他允许两个无关的进程访问相同的逻辑内存。共享内存是在两个运行的程序之间传递数据的有效手段。尽管X/Open标准并没有要求,很可能绝大数的共享内存实现都是会将不同进程之间正在共享的内存安排在相同的物理内存中。 共享内存为在多个进程之间共享与传递数据提供一个有效的手段。因为他并没有提供同步的方法,所以通常我们需要使用其他的机制来同步对共享内存的访问。通常,我们也许会使用共享内存来提供对大块内存区的有效访问,并且传递少量的消息来同步对此内存的访问。 向共享内存存放带有指针的结构体时,当再次向共享内存取出这个指针的值时,会出现内存错误。 结构体结构如下: t... 阅读全文

posted @ 2014-01-18 20:39 yuanqing 阅读(3440) 评论(1) 推荐(0)

fork创建子进程(printf的打印次数问题)
摘要:首先先看看程序执行结果:程序已简化printf("beforeforkwith换行符\n");printf("beforeforkwithout换行符");pid = fork();if(pid == 0){ //子进程 printf("Iamischildprocess,pid=%d\n",getpid()); printf("myparentprocess'spid=%d\n",getppid());}else if(pid > 0){ //父进程 printf("thisisparen 阅读全文

posted @ 2014-01-17 10:45 yuanqing 阅读(2358) 评论(0) 推荐(1)

fork创建多个子进程方法
摘要:第一种方法:验证通过特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序可读性较好,便于分析,易扩展为多个子进程int main(void){ printf("before fork(), pid = %d\n", getpid()); pid_t p1 = fork(); if( p1 == 0 ){ printf("in child 1, pid = %d\n", getpid()); return 0; } pid_t p2 = fork(); if( p2 == 0 ){ printf("in child 2, pid = %d 阅读全文

posted @ 2014-01-17 10:17 yuanqing 阅读(1142) 评论(0) 推荐(0)

realloc以后,原有内存被如何处理? 回收? 释放? 不管?
摘要:如果已分配的存储块后面有空闲的空间,则realloc不会移动数据而只是增加原来存储块的长度,并返回传给它的原存储块的指针。但当前存储块后面没有足够的空闲空间时,realloc会重新分配一存储块,并移动当前存储块的内容到新块,然后返回新块的指针。realloc() changes the size of the memory block pointed to by ptr tosize bytes. The contents will be unchanged to the minimum of the oldand new sizes; newly allocated memory will 阅读全文

posted @ 2014-01-15 14:54 yuanqing 阅读(1517) 评论(0) 推荐(0)

结构体动态数组的定义及操作
摘要:这两天在写一个linux下的C项目,需要控制一张临时表,这张表由动态结构体数组构成。需要实现动态数组的创建及其操作结构体如下所示:/*创建一个基站的动态数组的结构体*/typedef struct base_array{ int size ; int count ; struct base *data;}base_array;/*创建一个基站的结构体*/typedef struct base{ char id[6] ; int led; int way; struct locomotive *next ;}base;/*创建一个基站的动态数组*/void create_base_table(b 阅读全文

posted @ 2014-01-15 14:27 yuanqing 阅读(2103) 评论(0) 推荐(0)

C 语言中动态数组的实现
摘要:C语言中动态数组的实现近来编写几个程序,很多都用到了数组。但是对于数组的大小却是没有固定的,也就是说可以更改数组大小,其大小是可以变化的。并不像初学时的那样,告诉你一个范围,你就必须取最大值以满足要求。那样可能就会浪费很多不必要的内存单元!那么到底应该怎样定义一个动态数组列? 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。例如:intn;scanf("%d",&n);inta[n];用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而 阅读全文

posted @ 2014-01-11 20:46 yuanqing 阅读(470) 评论(0) 推荐(0)

Ubuntu下安装Code::Blocks
摘要:Code::Blocks是一款功能强悍的C、C++ IDE,工具小巧灵活、跨平台、支持SVN、代码高亮、格式化、国际化(软件界面语言可定制为中文)、强大的调试环境。本文主要介绍CodeBlock的安装与配置(Ubuntu环境下)整个过程。一、安装过程:1》安装基本编译环境sudo apt-get install build-essentialsudo apt-get install gdb2》安装codeblocksudo apt-get install codeblockssudo apt-get install codeblocks-dbgsudo apt-get install wxfo 阅读全文

posted @ 2014-01-11 12:35 yuanqing 阅读(495) 评论(0) 推荐(0)

Codeblocks & 开发板调试简单教程
摘要:远程调试十分也有用,而且很方便!Codeblocks作为linux下的C/C++ 集成开发环境(IDE)也十分好用。1.PC机的Codeblocks设置:当然,肯定是要装有Codeblocks才行啊,怎么装可以google一下。# codeblocks 打开Codeblocks启动起来后先新建一个工程:File--New--Project到如下界面,会让你选择新建工程的类型,这里选择console application。接着,选择语言类型,这里选择C。接着,next>,给工程取名,和设置工程路径。如下图:再Next>设置使用的编译器,由于后面还得修改所以先默吧,不管,后面在改!再 阅读全文

posted @ 2014-01-11 12:31 yuanqing 阅读(1100) 评论(0) 推荐(0)

导航