8.23
问题1:linux如何移动一个文件夹到另外一个目录下
mv 目录 新目录
问题2:vi编辑器如果保存并退出:wq.(注意冒号)
https://wenku.baidu.com/view/32cdfa48cc22bcd126ff0ceb.html
的第3题,学习c的信号传递,首先看看信号是什么鬼:
http://www.runoob.com/cplusplus/cpp-signal-handling.html
根据这2份源代码,初见端虞:
发送信号的进程源代码contrl:
问题1:linux如何移动一个文件夹到另外一个目录下
mv 目录 新目录
问题2:vi编辑器如果保存并退出:wq.(注意冒号)
https://wenku.baidu.com/view/32cdfa48cc22bcd126ff0ceb.html
的第3题,学习c的信号传递,首先看看信号是什么鬼:
http://www.runoob.com/cplusplus/cpp-signal-handling.html
根据这2份源代码,初见端虞:
发送信号的进程源代码contrl:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
int main(int arg,char *args[])
{
if(arg < 2) //如果没有参数,main函数返回
return 0;
else{
int pid = atoi(args[1]);//第一个参数转化为pid
printf("pid = %d\n",pid);
kill(pid,SIGINT);//向指向的pid发送SIGINT信号
return 0;
}
}
关于kill函数,可以参考博客:
http://www.cnblogs.com/leeming0222/articles/3994125.html
kill函数并不一定是杀死进程,而是给pid的进程传递信号。
个人理解就是,fork,wait函数都是父子进程的痛心方式,而kill函数则是可以在没有亲属关系的进程间传递信号实现通信。
而这篇博客里面用的waitpid函数,则是父进程等待子进程退出所使用的函数,可以参考博客:
http://blog.csdn.net/kevinhg/article/details/7001719
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#include<signal.h>
int status = 0; //定义一个全局变量,0为打印信息,1位不打印信息
void catch_Signal(int Sign)
{
switch(Sign)
{
case SIGINT:
if(status == 0)//如果status为0,那么设置status为1,否则设置status为0
status = 1;
else
status = 0;
break;
}
}
int signall(int signo,void (*func)(int))
{
struct sigaction act,oact;
act.sa_handler = func;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
return sigaction(signo,&act,&oact);
}
int main(int arg,char *args[])
{
signall(SIGINT,catch_Signal);//捕捉SIGINT信号
while(1)
{
if(status) //如果为1,打印字符串
{
printf("hello\n");
}
sleep(1);
}
return 0;
}
关于sigaction函数,感觉这个函数是比较难深入了解的,里面涉及一个sigaction结构体
可以参考博客:http://blog.csdn.net/hero06206/article/details/7354124
这2个程序的运行方式是:
recsig运行,一直在循环,这个时候可以通过进程监视器看到这个进程对应的pid
control正常运行,并且 通过args输入recsig进程pid之后,发送SIGINT给recsig
recsig收到信号之后就会触发捕捉信号的函数,输出hellp
但是更加具体的关于信号处理的结构体的话感觉比较复杂,只能先暂时不深入了解,希望以后如果有机会接触,使用多了就会找机会去深入了解他们