msgsnd的Resource temporarily unavailable问题定位
msgsnd() Resource temporarily unavailable
Resource temporarily unavailable 为资源不可用错误,
1、 一个进程 msgsnd (非阻塞方式)另外一个进程msgrcv
msgrcv进程接收到消息后退出,msgsnd一直发送消息 ,消息队列满 而又没有读取导致的。
2、msgsnd发送msg的每个参数都要赋值
解决办法:tar: Exiting with failure status due to previous
今天进行解压DM3730_DVSDK安装包的时候,我直接用的解压命令 tar -jxvf .... 然而到最后出现了解压错误tar: Exiting with failure status due to previous error
原来是我没有加sudo 导致出现了这个错误,解决办法就是,加上sudo tar -jxvf 安装包。
Text file busy解决方法
在使用scp复制开发机上面编译好的模块到测试机上时,出现了Text file busy的错误。
经过检查发现由于是直接覆盖原来的模块,而原来的模块此时仍然处于运行状态,因此才会发生上述错误。
解决方法是kill掉运行的模块,再执行scp覆盖就不会报错了。
自己又再做了几个实验:
(1)先rm删除正在运行的test,然后cp test2 test就没有错误了。
(2)先mv改名正在运行的test,然后cp test2 test也没有问题。
查了查资料并动手分析了一下,找到了比较满意的解释。cp并不改变目标文件的inode,事实上它的实现是这样的: # strace cp test2 test 2&1 | grep open.*test open("test2", O_RDONLY|O_LARGEFILE) = 3 Linux由于Demand Paging机制的关系,必须确保正在运行中的程序镜像(注意,并非文件本身)不被意外修改,因此内核在启动程序后会锁定这个程序镜像的inode。这就是为什么cp在用“O_WRONLY|O_TRUNC”模式open目标文件时会失败。而先rm再cp的话,新文件的inode其实已经改变了,原inode并没有被真正删除,直到内核释放对它的引用。