用C语言编写程序建立一个pipe
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、用C语言编写程序,建立一个pipe, 同时父进程生成一个子进程,子进程向pipe写入一
个字符串”Hello.”,父进程从pipe中读取该字符串。5'
#include
#include
#include
#include
#include
#include
int main()
{
char buf[20];
int piledes[2];
pid_t pid;
int ret;
if(ret = pipe(piledes) == -1)
{
perror("error on pipe:");
exit(-1);
}
else
{
pid = fork();
if(pid < 0)
{
perror("error on fork:");
exit(-1);
}
else if(pid == 0)
{
close(piledes[0]);
printf("to fu:");
fgets(buf,sizeof(buf)-1,stdin);
if((ret = write(piledes[1],buf,strlen(buf))) < 0)
{
perror("error on writing:");
exit(-1);
}
close(piledes[1]);
}
else
{
close(piledes[1]);
if((ret = read(piledes[0],buf,sizeof(buf)-1)) < 0)
{
perror("error on reading:");
exit(-1);
}
buf[ret] = '\0';
printf("from zi:%s\n",buf);
close(piledes[0]);
}
}
return 0;
}
2、编写一个 C语言程序lswc,使之功能能和ls | wc 等价。(也就是利用,fork,exec,以及ls,wc,以及重定向,或者是管道的系统调用) 13’
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int pildes[2];
int ret;
char *argument[3];
pid_t pid;
char buf[1000];
if(argc < 2)
{
printf("que shao can shu\n");
exit(0);
}
argument[0] = "ls";
argument[1] = "/";
argument[2] = NULL;
if((ret = pipe(pildes)) < 0)
{
perror("error on pipe:");
exit(-1);
}
pid = fork();
if(pid <0)
{
printf("fork error\n");
exit(-1);
}
if(pid == 0)
{
close(pildes[0]);
dup2(pildes[1],1);
execvp("ls",argument);
close(pildes[1]);
}
else
{
close(pildes[1]);
// dup2(fildes[0],0);
if(strcmp((argv[1]),"wc") == 0)
{
bzero(buf,sizeof(buf));
if((ret = read(pildes[0],buf,sizeof(buf))) < 0)
{
printf("error on reading:");
exit(-1);
}
buf[ret] = '\0';
printf("%s",buf);
close(pildes[0]);
}
}
return 0;
}
3、实现一个具有头节点的链表。要求具有create, insert, delete, search功能,能对链表。
编写一个应用程序,使用上面的函数。 10'
#include
#include
#include
#include
#define PASSWD 111111
struct student
{
int num;
char name[20];
float grade;
struct student *next;
};
typedef struct student stuNode;
typedef struct student *stuPtr;
int stuwrite(stuPtr head)
{
FILE *fp;
fp = fopen("stu","w");
while(head->next != NULL)
{
head = head->next;
fwrite(head,sizeof(stuNode),1,fp);
}
close(fp);