linux消息队列阻塞-读取Linux消息队列阻塞读取的研究 (linux消息队列msgrcv)

教程大全 2025-07-12 15:17:59 浏览

消息队列在Linux系统中是一种普遍存在的消息交换机制,用于不同进程之间的异步消息传递、协调。消息队列提供一种简单,强大且可靠的消息交换方法,它提供一个受控的消息通道,允许客户端和 服务器 之间的通信。 阻塞读取是Linux消息队列中最常用的读get="_blank">操作,阻塞读取可以保证在读取消息队列中的消息时不会错过任何消息。

那么如何为Linux消息队列编写一个简单的阻塞式读取程序呢?之所以要选择阻塞式读取,是因为它比较简单,只要调用一个系统调用msgrcv()就能从消息队列中接收消息,下面将使用C语言实现从消息队列中读取数据的例子:

#includeint main() { // Step 1. 打开消息队列 int msgid = msgget((key_t)1234, 0666 | IPC_CREAT); if (msgid == -1) { fprintf(stderr, "msgget failed with error: %d\n", errno); exit(EXIT_FAILURE); } // Step 2. 要接收的消息 struct msg_buffer { long int message_type; char message_text[MAX_BUF_SIZE]; } message_rcv; int length; // Step 3. 循环接收消息 while (1) { // Step 3.1. 依次从消息队列读取消息 if ((length = msgrcv(msgid, &message_rcv, MAX_BUF_SIZE, 0, 0)) > 0) { // Step 3.2. 成功收到消息,把消息数据打印出来 printf("Received message : %s\n", message_rcv.message_text); }else{ // Step 3.3. 无消息时,msgrcv()返回-1,因此要处理阻塞读操作的所有错误 if (errno == EINTR) //表示读操作被“中断”,继续读取 continue; else if (errno == EAGAIN) //表示消息队列中没有消息 break; else { fprintf(stderr, "msgrcv failed with error\n"); exit(EXIT_FAILURE); } } } // Step 4. 删除消息队列 if (msgctl(msgid, IPC_RMID, 0) == -1) { fprintf(stderr, "msgctl(IPC_RMID) failed\n"); exit(EXIT_FAILURE); } return 0; } 
读取Linux消息队列阻塞读取的研究

以上就是在Linux系统中读取消息队列的基本步骤:首先,使用msgget()打开消息队列;其次,定义所需要接收的消息;之后,使用循环不断地从消息队列中读取消息;最后,使用msgctl()关闭消息队列。在程序中,需要注意msgrcv()函数会处理相关信号并返回-1,以表示消息队列中没有任何消息或者遇到信号导致读取操作被中断,因此需要检查errno的值以确定是什么原因导致的读取操作的失败。

综上所述,阻塞读取是Linux消息队列中应用最广泛的读取操作,使用C语言可以很容易实现从消息队列中读取的程序,简化了消息传递的编程工作,使不同进程之间的通信更加简便,更加高效。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


linux shell脚本读取用户输入的参数

$# 是传给脚本的参数个数$0 是脚本本身的名字$1是传递给该shell脚本的第一个参数$2是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表例如:#!/bin/shecho arg_num: $#echo shell_name: $0echo first_arg : $1echo second_arg : $2echo args : $@

电脑超级密码怎么删除

复XP管理员密码的五大秘诀 秘诀1:大家知道,WindowsXP的密码存放在系统所在的Winnt\System32\Config下SAM文件中,SAM文件即账号密码数据库文件。 当我们登录系统的时 候,系统会自动地和Config中的SAM自动校对,如发现此次密码和用户名全与SAM文件中的加密数据符合时,你就会顺利登录;如果错误则无法登录。 既然如此,我们的第一个方法就产生了:删除SAM文件椿指疵苈搿? 如果你不用管本来系统卡包含的任意账号,而且有两个操作系统的话,可以使用另外一个能访问NTFS的操作系统启动电脑,或者虽然没有安装两个系统,但可以使用其他工具来访问NTFS。 然后删除C:\WINNT\system32\config目录下的SAM文件,重新启动。 这时,管理员Administrator账号就没有密码了。 当然,取下硬盘换到其他机器上来删除SAM文件也算个好办法。 小提示:WindowsNT/2000/XP中对用户账户的安全管理使用了安全账号管理器(Security AccountManager,SAM)的机制,安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。 安全标识是惟一的,即使是相同的用户名,在每次创建时获得的安全标识都是完全不同的。 因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原未的权限 。 安全账号管理器的具体表现就是%SystemRoot%\system32\config\sam文件。 SAM文件是WindowsNT/2000/XP的用户账户数据库,所有用户的登录名及口令等相关信息部会保存在这个文件中。 秘诀2:下面介绍一个比较与众不同的方法。 你可以在别的分区上再装一个XP,硬盘分区格式要和原来的一样,并且请你注意一定不要和原来的XP安装在同一分区!在开始之前,一定要事先备份引导区MBR(Master Boot Record).备份MBR的方法有很多,可以自己编程,或使用工具软件,如杀毒软件KV3000等。 装完后用Administrator登录,现在你对原来的XP就有绝对的写权限了。 你可以把原来的SAM拷下来,用lOphtcrack得到原来的密码。 也可以把新安装的XP的Winnt\System32\Config\下的所有文件覆盖到C\Winnt\System32\Config目录中(假设原来的XP安装在这里),然后用KV3000恢复以前备份的主引导区MBR,现在你就可以用Administrator身份登陆以前的XP了。 小提示:MBR俗称主引导区,它的作用是读取磁盘分区表(Partition Table)里面所设定的活动分区 (Active Partition),位于硬盘的柱面0、磁头0、扇区1的位置,也即俗你的0磁道位置。 它是由分区命令fdisk产生的。 MBR包括硬盘引导程序和分区表这两部分。 MBR结束标志为55AA,用杀毒软件KV3000的F6功能即可查看,其默认画面即为MBR。 如果MBR找不到活动分区,就会在屏幕上显示像Missing operating System等错误讯息,所以,如果你的WindowsXP无法正常开启。 而你又在屏幕上看到类似这样的错误讯息,原因大多就是出在这里了。 秘诀3:使用Off1ine NT Password & Registry Editor。 用该软件可以制作Linux启动盘,这个启动盘可以访问NTFS文件系统,因此可以很好地支持Windows2000/XP。 使用该软盘中的一个运行在Linux的工具Ntpasswd就可以解决问题。 并且可以读取注册表并重写账号密码。 使用的方法很简单,只需根据其启动后的提示一步一步做就可以了。 在此,建议你使用快速模式,这样会列出用户供你选择修改哪个用户的密码。 默认选择Admin组的用户,自动找到把Administrator的名字换掉的用户,十分方便。 秘诀4:使用Windows Key 5.0。 该软件包含在PasswareKit5.0中,用于恢复系统管理员的密码,运行后生成3个文件和,3个文件一共才50KB,短小精悍。 把这3个文件放到任何软盘回答者:老纪seo

在WINDOWS XP中,怎么才能用一个USER用户的权限来修改管理员的密码?

这里有详细的介绍: 秘诀1:大家知道,WindowsXP的密码存放在系统所在的 window/system32/config/ 下SAM文件中,SAM文件即账号密码数据库文件。 当我们登录系统的时 候,系统会自动地和Config中的SAM自动校对,如发现此次密码和用户名全与SAM文件中的加密数据符合时,你就会顺利登录;如果错误则无法登录。 既然如此,我们的第一个方法就产生了:删除SAM文件来恢复密码。 还有其它的一些方法,你可以根据情况试试: 一、利用NET命令 我们知道在Windows XP中提供了“net user”命令,该命令可以添加、修改用户账户信息,其语法格式为: net user [UserName [Password | *] [options> [/domain] net user [UserName {Password | *} /add [options] [/domain] net user [UserName [/delete] [/domain> 每个参数的具体含义在Windows XP帮助中已做了详细的说明,在此笔者就不多阐述了。 好了,我们现在以恢复本地用户“zhangbq”口令为例,来说明解决忘记登录密码的步骤: 1、重新启动计算机,在启动画面出现后马上按下F8键,选择“带命令行的安全模式”。 2、运行过程结束时,系统列出了系统超级用户“administrator”和本地用户“zhangbq”的选择菜单,鼠标单击“administrator”,进入命令行模式。 3、键入命令:“net user zhangbq /add”,强制将“zhangbq”用户的口令更改为“”。 若想在此添加一新用户(如:用户名为abcdef,口令为)的话,请键入“net user abcdef /add”,添加后可用“net localgroup administrators abcdef /add”命令将用户提升为系统管理组“administrators”的用户,并使其具有超级权限。 4、重新启动计算机,选择正常模式下运行,就可以用更改后的口令“”登录“zhangbq”用户了。 二、利用“administrator” 我们知道在安装Windows XP过程中,首先是以“administrator”默认登录,然后会要求创建一个新账户,以便进入Windows XP时使用此新建账户登录,而且在Windows XP的登录界面中也只会出现创建的这个用户账号,不会出现“administrator”,但实际上该“administrator”账号还是存在的,并且密码为空。 当我们了解了这一点以后,假如忘记了登录密码的话,在登录界面上,按住Ctrl+Alt键,再按住Del键二次,即可出现经典的登录画面,此时在用户名处键入“administrator”,密码为空进入,然后再修改“zhangbp”的口令即可。 如果你不用管本来系统卡包含的任意账号,而且有两个操作系统的话,可以使用另外一个能访问NTFS的操作系统启动电脑,或者虽然没有安装两个系统,但可以使用其他工具来访问NTFS。 然后删除C:\window/system32/config/ 目录下的SAM文件,重新启动。 这时,管理员Administrator账号就没有密码了。 当然,取下硬盘换到其他机器上来删除SAM文件也算个好办法。 小提示:WindowsNT/2000/XP中对用户账户的安全管理使用了安全账号管理器(Security AccountManager,SAM)的机制,安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。 安全标识是惟一的,即使是相同的用户名,在每次创建时获得的安全标识都是完全不同的。 因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原未的权限 。 安全账号管理器的具体表现就是%SystemRoot%\system32\config\sam文件。 SAM文件是WindowsNT/2000/XP的用户账户数据库,所有用户的登录名及口令等相关信息部岜4嬖谡飧鑫募小? 秘诀2:使用Off1ine NT Password & Registry Editor。 用该软件可以制作Linux启动盘,这个启动盘可以访问NTFS文件系统,因此可以很好地支持Windows2000/XP。 使用该软盘中的一个运行在Linux的工具Ntpasswd就可以解决问题。 并且可以读取注册表并重写账号密码。 使用的方法很简单,只需根据其启动后的提示一步一步做就可以了。 在此,建议你使用快速模式,这样会列出用户供你选择修改哪个用户的密码。 默认选择Admin组的用户,自动找到把Administrator的名字换掉的用户,十分方便。 秘诀3:使用Windows Key 5.0。 该软件包含在PasswareKit5.0中,用于恢复系统管理员的密码,运行后生成3个文件和,3个文件一共才50KB,短小精悍。 把这3个文件放到任何软盘中,然后使用XP安装光盘启动电脑,启动过程中按F6键让系统安装第三方的驱动程序。 此时,正是我们切入的最好时机,放人该软盘就会自动跳到WindowsKey的界面。 它会强行把Administrator的密码换成 ,如此一来何愁大事不成?呵呵!当你重新启动以后,你会被要求再次修改你的密码。 秘诀4:使用NTFS DOS这个可以从DOS下写NTFS分区的工具。 用该软件制作一个DOS启动盘,然后到C;\Winnt\System32下将屏幕保护程序改名,接着拷贝到C:\Winnt\system32下(2000可以用),并将该文件改名为。 这样启动机器后等待5分钟,本应该出现的屏幕保护现在变成了命令行模式,而且是具有Administrator权限的,通过它就可以修改密码或者添加新的管理员账号了。 改完后不要忘了把屏幕保护程序的名字改回去啊。 下载地址:http://? 秘诀5:下面介绍一个比较与众不同的方法。 你可以在别的分区上再装一个XP,硬盘分区格式要和原来的一样,并且请你注意一定不要和原来的XP安装在同一分区!在开始之前,一定要事先备份引导区MBR(Master Boot Record).备份MBR的方法有很多,可以自己编程,或使用工具软件,如杀毒软件KV3000等。 装完后用Administrator登录,现在你对原来的XP就有绝对的写权限了。 你可以把原来的SAM拷下来,用lOphtcrack得到原来的密码。 也可以把新安装的XP的Winnt\System32\Config\下的所有文件覆盖到C\Winnt\System32\Config目录中(假设原来的XP安装在这里),然后用KV3000恢复以前备份的主引导区MBR,现在你就可以用Administrator身份登陆以前的XP了。 小提示:MBR俗称主引导区,它的作用是读取磁盘分区表(Partition Table)里面所设定的活动分区 (Active Partition),位于硬盘的柱面0、磁头0、扇区1的位置,也即俗你的0磁道位置。 它是由分区命令fdisk产生的。 MBR包括硬盘引导程序和分区表这两部分。 MBR结束标志为55AA,用杀毒软件KV3000的F6功能即可查看,其默认画面即为MBR。 如果MBR找不到活动分区,就会在屏幕上显示像Missing operating System等错误讯息,所以,如果你的WindowsXP无法正常开启。 而你又在屏幕上看到类似这样的错误讯息,原因大多就是出在这里了。 :如果你觉得上面的方法太麻烦的话,而系统盘里没有重要文件的话重做就可以了。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐