#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define BUFF_LEN 1024
#define RET_ERROR 1
#define RET_OK 0
typedef struct msg_send_struct { //这就是一个消息的数据结构
long my_type//我们就是根据这个字段来区分每块消息的
char my_text[BUFF_LEN]
} msg_send_struct
int main() {
char * path = "/"
int i_porject_id = 7
key_t key
msg_send_struct msg_send//定义发送消息
int i_ret
int i_msg_id
int i_flag = 0666|IPC_CREAT//为消息管道的创建指定参数,IPC_CREAT表示这个消息队列是创建,而不是搜索已经存在的消息队列
key = ftok(path, i_porject_id)//为消息队列生成一个key,当然你也可以手动指定,当你运气很好没有和已经窜在的消息队列的key起冲突的时候
if(key == 1) {
printf("building key error\n")
exit(1)
}
i_msg_id = msgget(key, i_flag)//根据你的参数决定是创建还是搜索KEY值得消息队列
if(i_msg_id == -1) {
printf("create msg queue error\n")
exit(1)
}
printf("i_msg_id = %d\n", i_msg_id)
msg_send.my_type = 1
strcpy(msg_send.my_text, "hello world")//初始化消息
i_ret = msgsnd(i_msg_id, &msg_send, strlen("hello world") + 1, IPC_NOWAIT)//开始发送,nowait表示如果队列中消息满了当前进程不等待直接返回错误,反之很容易理解吧
if(i_ret == -1) {
printf("msg send error\n")
exit(1)
}
exit(0)
}
下面是系统调用:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>这些头文件可不是库函数,他里面就是linux提供的系统调用。
key = ftok(path, i_porject_id)//为消息队列生成一个key,当然你也可以手动指定,当你运气很好没有和已经窜在的消息队列的key起冲突的时候
linux中系统调用,利用文件系统和ID来创建KEY。
i_msg_id = msgget(key, i_flag)//根据i_flag值决定是创建还是寻找消息队列的系统调用。
i_ret = msgsnd(i_msg_id, &msg_send, strlen("hello world") + 1, IPC_NOWAIT)//发送消息的系统调用msgsnd函数。
这里涉及到进程通信中的消息队列内容,如果不明白没什么关系,可以看出来他和C的库函数调用一模一样,只不过实现方式,这需要你的知识积累到一定程度,有很大差别。对于一个程序员来说,我们看不出什么他们和库函数有什么区别,这算是一种对我们的透明性。
补充:这个例子是我写来学习进程通信内容的,由于采用了linux系统调用,所以只能在linux下面运行,还有就是我没有考虑权限问题,所以要编译请用超级用户root,由于消息队列的特性,这个程序没有释放队列(我把释放代码写在了接受消息的程序中),第2次运行就会报消息队列不能创建的错误。
Linux *** 作系统里面的“系统调用”这一概念相当于Windows上面的API,这样你就明白了吧,懂编程的应该都知道Windows API是个什么东东。所不同的是Linux系统调用的需要包含头文件比较分散,这一点在使用时需要注意,不同的系统调用记得要#include对应的头文件。linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。以下是win10中使用linux命令的方法:1首先,点击屏幕左下角的Win图标,然后在d出的菜单中选择“所有应用”。2在所有应用中找到并展开 Windows PowerShell 文件夹,启动其下的 Windows PowerShell。
3这时,将会打开一个命令行窗口。然后,请稍微等待一会,直到出现 PowerShell 命令提示符为止。
4这时,便可以输入 Linux 命令了。例如,输入一个 Linux 文件查看命令 ls,回车,便可以列出当前目录下的文件和文件夹列表。
注意事项
Windows PowerShell 支持绝大部分 Linux 内置命令,但有些命令例外。具体来说有:
1)命令简写(或称命令别名)
例如,不支持 Linux 下的文件查看命令 ll 。该命令作用为以详细信息方式查看当前目录下文件,它实质是 ls -l 命令的简写。
2)需要调用 linux 系统中的程序才能执行的命令,如 vim
由于 Windows 系统中并没有内置 vim 程序,故而与 vim 有关的命令无法启用。
3)帮助命令
在 Linux 系统中,如果要知道某条命令的用法,可以使用帮助命令了。但在 Windows 中,默认是没有安装Linux中的帮助命令的。如果想使用该命令,可以联网安装或在线查看。
模式切换
1、 由图形到字符#logout或init 3
2、由字符到图形界面init 5
3、退出consolelogout或exit或ctrl+d
4、 注销Ctrl + Alt + Backspace
5、 关机#poweroff或init 0或shutdown -h now或 halt -p
6、 重启#reboot或init 6或shutdown -r now
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)