linux学习笔记3

将结果输出到另外一个终端中

通过xshell分别打开两个终端

c程序中,默认有三个输出流,分别为STDIN_FILENO/STDOUT_FILENO/STDERR_FILENO

#include <stdio.h>
#include <stdlib.h>

#include <unistd.h>

int main(int argc,char *argv[])
{
	printf("stdin=%d\n",STDIN_FILENO);     //默认输入流
	printf("stdout=%d\n",STDOUT_FILENO);   //默认输出流
	printf("stderr=%d\n",STDERR_FILENO);   //默认错误输出流
	return 0;
}

如何将内容输出到另外一个终端中

#include <stdio.h>
#include <stdlib.h>

#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc,char *argv[])
{
	close(STDOUT_FILENO);                 //关闭默认输出流
	int fd = open("/dev/pts/1",O_WRONLY); //打开终端1,会将终端1描述符替换为默认的输出流,
	while(1)
	{
		sleep(1);
		printf("pts1=%d\n",fd);       //会将输出的内容指定到终端中1 
	}

	return 0;
}


僵死进程

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc,char *argv[])
{
	pid_t child = fork();
	int status;
	if( child == -1)
	{
		printf("fork failed!\n");
		return -1;
	}
	if(child == 0)
	{
		printf("child bengin!\n");
		printf("childe end!\n");
		exit(0);       //子进程退出,父进程没有退出的话,就可能形成僵死进程
	}
	else
	{
		printf("parent begin!\n");
		printf("parent end!\n");
	}
	return 0;
}

可以用wait避免僵死进程,具体使用看

 linux学习笔记2

孤儿进程(与僵死进程对应)

孤儿进程是一个父进程在调用wait或者waitpid之前就已经退出的子进程.

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc,char *argv[])
{
	pid_t child = fork();
	if( child == -1)
	{
		printf("fork failed!\n");
		return -1;
	}
	if(child == 0)
	{
		printf("child bengin!\n");
		sleep(1);
		printf("pid =%d\n",getppid());  //输入父进程id是1,也就是init进程,这个时候该进程就是孤儿进程
	}
	else
	{
		exit(0);
	}
	return 0;
}


秋风 2016-11-22