搜档网
当前位置:搜档网 › 用C语言编写程序建立一个pipe

用C语言编写程序建立一个pipe

用C语言编写程序建立一个pipe
用C语言编写程序建立一个pipe

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);

return 0;

}

stuPtr sturead()

{

FILE *fp;

stuPtr head,p1,p2;

int a;

head = (stuPtr)malloc(sizeof(stuNode));

head->next = NULL;

p1 = head;

fp = fopen("stu","r");

do

{

p2 = (stuPtr)malloc(sizeof(stuNode));

p2->next = NULL;

a = fread(head,sizeof(stuNode),1,fp);

p1->next = p2;

p1 = p2;

}while(a == 1);

fclose(fp);

return head;

}

void creat()

{

stuPtr head,p;

head = (stuPtr)malloc(sizeof(stuNode));

p = (stuPtr)malloc(sizeof(stuNode));

p->next = NULL;

head->next = p;

printf("学号:");

scanf("%d",&(p->num));

getchar();

printf("姓名:");

scanf("%s",p->name);

getchar();

printf("成绩:");

scanf("%f",&(p->grade));

getchar();

stuwrite(head);

}

stuPtr insert(stuPtr head)

{

stuPtr p,q;

p = (stuPtr)malloc(sizeof(stuNode));

printf("学号:");

scanf("%d",&(p->num));

getchar();

printf("姓名:");

scanf("%s",p->name);

getchar();

printf("成绩:");

scanf("%f",&(p->grade));

getchar();

q = head;

while(q->next != NULL && p->num > q->next->num) {

q = q->next;

}

p->next = q->next;

q->next = p;

stuwrite(head);

p = sturead();

return p;

}

stuPtr search(stuPtr head,int num)

{

stuPtr p1,p2;

int flag;

p1 = (stuPtr)malloc(sizeof(stuNode));

p2 = (stuPtr)malloc(sizeof(stuNode));

p1 = head;

while(p1->next != NULL)

{

flag = 0;

p2 = p1;

p1 = p1->next;

if(p1->num == num)

{

flag = 1;

break;

}

}

if(flag == 1)

{

p1 = p2;

return p1;

}

else

{

printf("没有此人\n");

return NULL;

}

}

stuPtr delete(stuPtr head, int num) {

stuPtr p1,p2;

int flag;

p1 = search(head,num);

p2 = p1->next;

p1->next = p2->next;

free(p2);

stuwrite(head);

p1 = sturead();

return p1;

}

void print(stuPtr head)

{

stuPtr p;

int i;

printf("学号\t姓名\t成绩\n");

p = head->next;

while(p != NULL)

{

if(p->num >0 && p->grade >0)

{

printf("%d\t%s\t%.1f\n",p->num,p->name,p->grade);

}

p = p->next;

}

}

void print1(stuPtr p)

{

printf("学号\t姓名\t成绩\n");

while(p != NULL)

{

if(p->num >0 && p->grade >0)

{

printf("%d\t%s\t%.1f\n",p->num,p->name,p->grade);

}

p = p->next;

}

}

int main()

{

int choose,num;

stuPtr head,p;

head = (stuPtr)malloc(sizeof(stuNode));

p = (stuPtr)malloc(sizeof(stuNode));

while(1)

{

printf("1\t创建链表\n2\t添加节点\n3\t删除节点\n4\t查找学生\n5\t查看所有学生信息\n0\t退出\n");

scanf("%d",&choose);

switch(choose)

{

case 1:

creat();

break;

case 2:

head = sturead();

insert(head);

break;

case 3:

head = sturead();

printf("删除学生的学号:");

scanf("%d",&num);

delete(head,num);

break;

case 4:

head = sturead();

printf("学生学号:");

scanf("%d",&num);

p = search(head,num);

p = p->next;

print1(p);

break;

case 5:

head = sturead();

print(head);

case 0:

break;

default:

break;

}

}

return 0;

}

相关主题