linux *** 作系统中 使用系统调用的一般方式是怎样的?

linux *** 作系统中 使用系统调用的一般方式是怎样的?,第1张

给个例子给你看看吧,这里是linux中一个C语言程序,他用到了linux提供的系统调用,很长的程序了,或许你没耐心看,我在最后给你列出那些地方用了系统调用

#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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9015958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存