Linux-进程间的通信

本文出自 实验内容 消息的创建,发送,和接收。 <任务> 使用系统调用 msgget( ), megsnd( ), msgrev( )及 msgctl()编制一长度为 1K 的消息发送和接收的程序 。 程序设计 为了便于操作和观察结, 用一个程序为引子 , 先后fork( )两个子进程 , SERVER 和 CLIENT,进行通信。 SERVER 端建立一个 Key 为 75 的消息队列,等待其他进程发来的消息。当遇到类型为 1 的消息, 则作为结束信号,取消该队列,并退出 SERVER 。SERVER 每接收到一个消息后显示一句 “(server)received”。 CLIENT 端使用 Key 为 75 的消息队列,先后发送类型从 10 到 1 的消息,然后退出。最后的一个 消息,既是 SERVER 端需要的结束信号。CLIENT 每发送一条消息后显示一句“(client)sent”。 父进程在 SERVER 和 CLIENT 均退出后结束。 使用的函数 并非每次创建消息队列都会成功,所以重新添加-1情况的判断。 可以使用ipcs -q命令查看

Read More

Linux系统函数简介

本文出自 系统调用函数说明、参数值及定义 本文摘自老师的资料= = 使用这些函数的时候记得将头文件unistd.h包含到程序中 1、fork() 创建一个新进程 int fork() 其中返回int取值意义如下: 0:创建子进程,从子进程返回的id值大于0:从父进程返回的子进程id值 -1:创建失败 2、lockf(files,function,size): 用作锁定文件的某些段或者整个文件,本函数适用的头文件为: #include 参数定义: int lockf(files,function,size) int files,function; long size; 其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。 3、msgget(key,flag): 获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。 该函数使用偷文件如下: #include #include #include 参数定义 int msgget(key,flag) key_tkey; int flag; 语法格式:msgqid=msgget(key,flag) 其中:msgid是该系统调用返回的描述符,失败则返回-1;flag 本身由操作允许权和控制命令值相或得到。 如: IP_CREAT|0400 是否该队列应被创建; IP_EXCL |0400 是否该队列的创建应是互斥的;等。 msgsnd(id,msgp,size,flag): 发送一消息。 该函数是用头文件如下: #include #include #include 参数定义 int msgnd(id,msgp,size,flag) int id,size,flag; struct msgbuf * msgp; 其中:id是返回消息队列的描述符;msgp是指向用户存储区的一个构造体指针,size指示由msgp 指向的数据结构中字符数组的长度;即消息的长度。这个数组的最大值由MSG-MAX系统可调用参数来确 定。flag规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中末设置IPC_NOWAIT位,则当

Read More

Maven小记

发现maven与Java,别有一番乐趣 入门建议: https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html 现在很多文章其实写的都不如官方的文章,但是人们总是习惯性的从百度获取自己想要的某些资源。 maven编译依赖 一般情况下,maven不会把依赖的包编译到自己的jar包里面,我猜和dll的出发点是一样的,减少内存的占用(减少相同内容在内存中的冗余)。 但是有时候我们不能确保宿主的机器也有同样的东西,因此有时候需要把依赖编译进去。 我们可以这样做,在pom.xml中,添加字段: <!--构建依赖--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 由此,就可以把需要的依赖包同时编译进去了。 针对mvn,我上传了一个二维码扫描的例程,可供参考:https://github.com/Svtter/zxing-example

Read More

MongoDB与MySQL比较【翻译】

翻译于 https://www.mongodb.com/compare/mongodb-mysql?jmp=docs

概览

关系型数据库支持企业级应用已经有了十年之久,自从1995年MySQL释出,它已经成为最流行而低成本的选择。但是,在近几年存储以及不同类型数据的爆炸性增长,非关系型数据库,像是MongoDB,现行于市,满足新应用的需求。MongoDB既被用于新的应用,也被用于替代旧的关系型基础设施,或者在原来的基础上增加新的功能。

Read More

Python on Windows

在Windows上使用Python总会有这样或者那样的坑等着我们去踩。 pip问题 如果安装了两个版本的python,例如python3.5和python2.7,悲剧就发生了。除非每次都使用pip –no-cache来解决缓存问题,否则pip2可能会使用pip3的缓存,导致软件包出现稀奇的问题。 最好的解决方案是使用virtualenv来创建一个虚拟环境。安装virtualenv的方法很多,不再详谈。 有些人使用windows下的git-bash做一些操作,但是也是十分蛋疼的,git-bash这个高科技的东西,本身是在windows下运行,但是拥有bash的特性,查安装文档的时候,容易出现很多问题。本身使用的Python.exe,但是却要使用sh那一套东西,中间会不会出问题? 后来尝试了一下bash里面的东西,感觉还行。 一般Python文档所说的windows,应该是根据cmd的。但是Powershell这个windows的终端,居然不支持ftype这一类的cmd可用命令,造成又一层的不兼容。着实令人心烦。当然,我也没有深究这个问题,因为碰上一个问题就深究下去,而且深究的意义不是很大,我认为是很浪费时间的。 补充:windows下的Powershell抑或bash,可以利用MinGW来区分。但是往往文档中没有特别表明出来。 一些编码问题 主要就是utf-8的bom的问题。这个问题纯属M$想多了,导致各种讨厌的不兼容,最常见的出错。 终极解决方案 不要在Windows上使用Python,如果非常想要这么做,建议安装一个虚拟机,然后使用ssh连接到虚拟机上进行开发。使用桥接网卡,和NAT转接,保证联网。 现在再次修订一下,我现在认为,最佳的解决方案是,使用ssh链接到阿里云或者腾讯云使用。使用neovim+tmux+ipython来书写调试代码,效果非常。

Read More

Python – 复入坑

= =亲爱的Python再次拿起来。。 检测Python进入参数的类型 def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= : return x else: return -x 默认参数陷阱 L=[]会一直都是原来的值,因此初始值需要为None def add_end(L=None): if L is None: L = [] L.append('END') return L 利用可变参数 利用可变参数,可以一次传递多个值给函数。此外,还可以利用*把原来的list变成多个参数传入 def calc(*numbers): sum = for n in numbers: sum = sum + n * n return sum 结果: >>> calc(1, 2) 5 >>> calc() 此外:

Read More

Python – 批量重命名

要用酷狗音乐听一下听力,顺带着lrc文件,但是酷狗只认krc。料想也没什么区别,单个修改下,考入以后发现并不好用,于是决定改回。但是一个个改实在太笨拙。 #!/usr/bin/env python # authour: svtter # coding: utf-8 import os files = os.listdir('.') for filename in files: portion = os.path.splitext(filename) if portion[1] == '.krc': newname = portion[] + ".lrc" os.rename(filename, newname)

Read More