/**************************************************
该程序实现的是经过系统调用fork之后,父进程和子进程对
文件的共享存取。该程序有两个参数,一个是已经有的文件名,
另外一个是要创建的新文件名。该进程打开已有的文件,创建
一个新文件。进程调用fork来创建一个子进程。子进程可以通
过使用相同的文件描述符而继承地存取父进程的文件(即父进
程已经打开和创建的文件)。父进程和子进程分别独立地调用
rdwrt函数执行一个循环,实现从源文件中读一个字节,然后
写一个字节到目标文件中区。当系统调用read遇见文件尾时,
函数rdwrt立即返回。
**********************************************************/
#include<fcntl.h>
int fdrd,fdwt;
char c;
rdwrt( )
{
for( ; ; ){
if(read(fdrd,&c,1)!=1) return;
write(fdwt,&c,1);
}
}
main(int argc,char *argv[])
{
if(argc!=3){
exit(1);
}
if((fdrd=open(argv[1],O_RDONLY))==-1)
{
exit(1);
}
if((fdwt=creat(argv[2],0666))==-1)
{
exit(1);
}
fork( );
rdwrt( ); //两个进程执行同样的代码
exit(0);
}
//进程之间的管道通信
#include<string.h>
char string[]="Hello,world";
main()
{
int count,i;
int to_par[2],to_chil[2]; //到父、子进程的管道
char buf[256];
//两次执行系统调用pipe分别在数组to_par和to_chil中分配了两个文件描述符。
pipe(to_par);
pipe(to_chil);
if(fork()==0) //子进程在此执行,子进程从父进程继承了文件描述符0和1。
{
close(0); //关闭老的标准输入
dup(to_child[0]); //将管道的读复制到标准输入
close(1); //关闭老的标准输出
dup(to_par[1]); //将管道的写复制到标准输出
close(to_par[1]); //关闭不必要的管道描述符
close(to_chil[0]); close(to_par[0]); close(to_chil[1]);
for(;;)
{
if((count=read(0,buf,sizeof(buf))==0)
exit();
write(1,buf,count);
}
}
//父进程在此执行
close(1); //重新设置标准输入、输出
dup(to_chil[1]);
close(0);
dup(to_par[0]);
close(to_chil[1]); close(to_par[0]);
close(to_chil[0]); close(to_par[1]);
for(i=0;i<15;i++)
{
write(1,string,strlen(string));
read(0,buf,sizeof(buf));
}
}
//多进程的管道通信
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int pid1,pid2;
main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/
while ((pid1=fork( )) == -1);
if(pid1 == 0)
{
lockf(fd[1],1,0);
/*把输出串放入数组outpipe中*/
sprintf(outpipe,"child 1 process is sending message!");
write(fd[1],outpipe,50); /*向管道写长为50字节的串*/
sleep(3); /*自我阻塞3秒*/
lockf(fd[1],0,0);
exit(0);
}
else
{
while((pid2=fork( ))= =-1);
if(pid2= =0)
{
lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");
write(fd[1],outpipe,50);
sleep(3);
lockf(fd[1],0,0);
exit(0);
}
else
{
wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/
printf("%s\n",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}
//多进程的管道通信
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int pid1,pid2;
main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/
while ((pid1=fork( )) == -1);
if(pid1 == 0)
{ lockf(fd[1],1,0);
/*把输出串放入数组outpipe中*/
sprintf(outpipe,"child 1 process is sending message!");
write(fd[1],outpipe,50); /*向管道写长为50字节的串*/
sleep(3); /*自我阻塞3秒*/
lockf(fd[1],0,0);
exit(0);
}
else
{
while((pid2=fork( ))= =-1);
if(pid2= =0)
{ lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");
write(fd[1],outpipe,50);
sleep(3);
lockf(fd[1],0,0);
exit(0);
}
else
{ wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/
printf("%s\n",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}
分享到:
相关推荐
【Linux编程基础】是本文的核心话题,主要涵盖了Linux环境下C编程的基本概念、工具使用、编程风格和软件管理等方面。Linux编程对于入门级别的读者来说是一扇通向系统级开发的门,通过学习,读者将能够理解和掌握...
linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程 linux编程
【Linux编程】是由徐钦桂、徐治根、黄培灿和谢伟鹏四位专家编著的教材,主要涵盖了Linux操作系统下的程序设计和开发技术。这本书不仅提供了理论知识,还包含丰富的电子课件、习题解答以及实例源代码,旨在帮助学习者...
Linux编程电子书大全A是一个集合了多本关于Linux操作系统及编程的资源,旨在帮助学习者深入理解和掌握在Linux环境下进行程序开发的知识与技能。这个压缩包包含以下几本书籍: 1. **《Linux操作系统下C语言编程入门....
《Linux编程指南 第三版》是一本专注于Linux操作系统环境下的编程技术的书籍。它是一份宝贵的资源,为读者提供了一套完备的Linux编程实践和技巧。该书籍覆盖了Linux系统的内核特性、系统调用、库函数、网络编程、多...
《Linux编程从入门到精通》是一本旨在帮助初学者及有经验的开发者深入理解Linux操作系统并掌握其编程技术的书籍。书中的内容丰富且详细,不仅涵盖了基础概念,还深入探讨了许多高级主题,使得读者能够从零开始逐步...
本书全面介绍了Linux编程相关的知识,内容涵盖Linux基本知识、如何建立Linux开发环境、Linux开发工具、Linux文件系统、文件I/O操作、设备文件、进程与进程环境、守护进程、基本进程间通信方法、管道与命名管道等。...
《Linux编程》是一本专为高等学校计算机应用设计的规划教材,由徐钦桂、徐治根、黄培灿和谢伟鹏四位专家编著。这本书深入浅出地讲解了Linux操作系统下的编程技术,旨在帮助学生和开发者掌握在Linux环境下进行程序...
《Unix-Linux编程实践教程》是一本面向程序员和系统管理员的实用指南,旨在通过丰富的实例深入浅出地介绍Unix和Linux环境下的系统级编程技术。这本书涵盖了从基本的命令行操作到复杂的系统调用和库函数的使用,是...
在IT行业中,Linux编程技术是不可或缺的一部分,尤其对于系统级开发者和软件工程师而言。Linux操作系统以其开源、稳定和高效的特点,被广泛应用于服务器、嵌入式设备和云计算平台。本资料"Linux编程技术详解"提供了...
《Linux编程白皮书》是一本深入探讨Linux操作系统下编程技术的重要参考资料,涵盖了广泛的Linux编程主题。这本书可能包括了从基础概念到高级技术的详细讲解,帮助开发者理解如何在Linux环境中编写高效、可靠的软件。...
易语言Linux编程帮助文档是一份全面介绍如何使用易语言在Linux环境下进行软件开发的重要参考资料。易语言,作为一款中国本土的编程工具,以其简洁的语法和面向初学者的设计,深受国内程序员的喜爱。它允许开发者用...
《GNU/Linux编程指南(第二版)》是一本深入探讨Linux操作系统下编程实践的权威书籍,适合初学者和有经验的开发者。它涵盖了从基础的C语言编程到高级的系统调用,再到进程管理、网络编程等多个领域。这本书的第二版在...
Linux编程教程——Linux下编程入门 在Linux操作系统中进行编程是一项重要的技能,尤其对于系统级开发者和软件工程师来说。Linux提供了丰富的开发环境和工具,支持多种编程语言,如C、C++、Python、Java等。本教程将...
在深入探讨《Linux编程白皮书》所涵盖的知识点之前,我们先来了解这份文档的重要性以及它为何成为了学习Linux编程的宝贵资源。《Linux编程白皮书》是一份详尽的技术指南,旨在帮助程序员理解并掌握Linux操作系统的...
《Linux编程指南》是一本专为Linux系统编程者编写的英文原版图书,采用PDF格式,旨在帮助读者深入了解Linux环境下的编程技术。该书详细介绍了Linux操作系统的核心概念、编程接口以及开发工具,对于想要在Linux平台上...
在深入探讨Linux编程技术之前,我们首先需要理解Linux操作系统的基础。Linux是一种自由和开放源代码的类UNIX操作系统,它的内核由林纳斯·托瓦兹(Linus Torvalds)于1991年创建。Linux系统广泛应用于服务器、移动...
《Linux编程技术详解》是一本深受初学者喜爱的Linux编程指南,它涵盖了广泛的Linux系统编程基础知识,旨在帮助读者从零开始逐步掌握Linux编程的核心技能。这本书的附送光盘源码rar文件包含了与书中讲解密切相关的...
【Linux编程基础】 在计算机科学领域,Linux编程是开发针对Linux操作系统进行运行的应用程序的过程。Linux,作为一个开源、自由的操作系统,提供了丰富的API(应用程序接口)和系统调用来供开发者使用。Linux编程...