课程名称:
操作系统
设计题目:
管道通讯
指导教师:
*******
班
级:
*******
学
号:
*****
学生姓名:
***
同组人员:
*******************
成
绩:
先创立一个管道,再经过 fork 函数创立一个子进度,
该子进度会继承父进度创立的管道。注意事项:必须在系统调用 fork ()前调用 pipe (),
否则子进度将不会继承文件描绘符。 否则, 会创立两个管道, 因为父子进度共享同一段代码
段,都会各自调用 pipe (),即成立两个管道,出现异样错误。 父进度经过管道向服务器发
布命令,然后由服务器履行命令。
()
创立一个新进度。
用法:
int fork()
其中返回
int
取值意义如下
:
0:创立子进度 , 从子进度返回的 id 值
>0:从父进度返回的子进度 id 值
-1 :创立失败
(files,function,size)
用作锁定文件的某些段或许整个文件。
头文件 :
#include <>
参数定义 :
int lockf(files,function,size);
int files,function;
long size;
其中 :files 是文件描绘符; function 是锁定和解锁; 1 表示锁定;
定或解锁的字节数,若用 0, 表示从文件的目前地点到文件尾。
0 表示解锁;
Size
是锁
功能:从描绘符为
filedes
的文件读信息。
用法:
#include <>
ssize_t read(int
filedes
, void *
buff
, size_t
nbytes ) ;
返回:读到的字节数,若已到文件尾为
0,若犯错为
-1 。
在 UNIX/Linux 可重定义为:
int read(int fd, char *buff , unsigned nbytes) ;
功能:向已翻开的文件写数据。
用法:
#include <>
ssize_t write(int
filedes
, const void *
buff
, size_t
nbytes ) ;
返回值:若成功为已写入的字节数;犯错为
-1 。
int write(int fd, char *
buff
, unsigned
nbytes
) ;
文件地点指针
文件地点指针: 每个翻开文件都有一个与其有关系的“目前位移量”。 是从文件开始处
计算的字节数。 往常,读、 写操作都从目前文件地点处开始,并使位移量增加所读或写的字节数。
按系统默认,当翻开一个文件时,除非指定 O_APPEND选择项,否则该位移量被设置为
0,即指向文件的开始处。
文件地点指针能够经过系统调用 lseek 来移动。
#include <>
#include <sys/>
#include <>
#include <>
#include <>
#include <>
/*
程序入口
*/
int main()
{
int pipe_fd[2];
pid_t pid;
char buf_r[100];
char* p_wbuf;
int r_num;
memset(buf_r,0,sizeof(buf_r)); // 对较大的构造体或数组进行清零操作的一种最快方法
/* 创立管道 */
if(pipe(pipe_fd)<0)
{
printf("pipe create error\n");
return -1;
}
/* 创立子进度 */
if((pid=fork())==0)
{
//子进度履行序列
printf(
操作系统管道通信课程设计 来自淘豆网m.daumloan.com转载请标明出处.