linux环境下,设计两个程序,使用管道传输文件,用C语言实现(最好不要调用shell命令)

linux环境下,设计两个程序:send程序能读取当前目录下的【a.txt】(文本文件),并把文件传入命名管道【myfifo】;get程序能读取管道【myfifo】中的内... linux环境下,设计两个程序:
send程序能读取当前目录下的【a.txt】(文本文件),并把文件传入命名管道【myfifo】;
get程序能读取管道【myfifo】中的内容并写入到当前目录下的【b.txt】(不存在,要程序创建)文件中;
跪求代码啊弟兄们
展开
 我来答
欧俊雅35
2012-04-13 · TA获得超过113个赞
知道答主
回答量:7
采纳率:0%
帮助的人:17.4万
展开全部
我提供的代码如下,自己补充main函数哈,希望能够帮到你:)
//相关头文件:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

发送方send:
void fifo_pro()
{
char s[128];
int fd;
FILE *fp;
fp = fopen("./a.txt", "r");
mkfifo("/tmp/fifo.tst", 0644);
fd = open("/tmp/fifo.tst", O_WRONLY);
while(fgets(s, 127, fp) != NULL) {
write(fd, s, strlen(s));
//printf("%s",s);
}
close(fd);
fclose(fp);
unlink("/tmp/fifo.tst");
}

接收方get:
char s[128];
int fd = open("/tmp/fifo.tst", O_RDONLY);
int fd2 = open("./b.txt", O_WRONLY)
memset(s, 0, 128);
while(read(fd, s, 128) > 0) {
printf("%s", s);
write(fd2, s, 128);
}
close(fd2);
close(fd);
更多追问追答
追问
谢谢了,兄弟。今晚做jsp,明天我试试,能留一个QQ吗?不懂的问你啊.
追答
我看了下下面兄弟的程序,他已经添加main函数并且分两个文件帮你写了。我逐行阅读了一下,他的程序应该是OK的。我晚上可以抽时间帮你调试一下哈,白天办公室没有linux环境。你留一个邮箱,我把我的qq发给你。刚刚都写这里了,觉得公开qq还是不好:)

补充:下班后边听歌边帮你调试了一把,发送和接收的代码分别放在send.c和get.c文件中,文件较少,就不用Makefile了,用如下两条命令编译:gcc -o send.o send.c;gcc -o get.o get.c。
自己随意生成一个a.txt文件,保存在与send.o相同的目录下。之后先运行sudo ./send.o,然后运行sudo ./get.o,将在同目录下得到b.txt文件,内容与a.txt一致。

具体代码如下:
/******************send.c*****************/
#include
#include
#include
#include
#include
#include
#include
#include

int main()
{
char s[128];
int fd;
FILE *fp;
fp = fopen("./a.txt", "r");
mkfifo("/tmp/fifo.tst", 0644);
fd = open("/tmp/fifo.tst", O_WRONLY);
while(fgets(s, 127, fp) != NULL) {
write(fd, s, strlen(s));
printf("%s",s);
}
close(fd);
fclose(fp);
unlink("/tmp/fifo.tst");

return 0;
}

/******************get.c*****************/
#include
#include
#include
#include
#include
#include
#include
#include

int main()
{
char s[128];
int fd = open("/tmp/fifo.tst", O_RDONLY);
int fd2 = open("./b.txt", O_CREAT|O_WRONLY);
memset(s, 0, 128);
while(read(fd, s, 128) > 0) {
printf("%s", s);
write(fd2, s, 128);
printf("fd2=%d\n",fd2);
}
close(fd2);
close(fd);
return 0;
}
flly1314
2012-04-15 · TA获得超过321个赞
知道答主
回答量:89
采纳率:0%
帮助的人:72.1万
展开全部
get端程序
--------------------------------
#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
int main()
{
char s[128];
int fd,fd2;
int len;
fd = open("/tmp/fifo.tst", O_RDONLY,0);
fd2 = open("./b.txt", O_WRONLY|O_CREAT,777);
if(fd<0||fd2<0)
{
printf("errer%d\t%d\n",fd,fd2);
exit(0);
}
memset(s, 0, 128);
do{
len=read(fd, s, 128);
write(fd2, s,len);
}while(len>0);
close(fd2);
close(fd);
}
------------------------------------
send端程序
#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
int main()
{
char s[128];
int fd,fp;
int len;
fp = open("./a.txt", O_RDONLY,0);
unlink("/tmp/fifo.tst");
mkfifo("/tmp/fifo.tst",S_IWUSR|S_IRUSR|S_IRGRP|S_IROTH);
fd = open("/tmp/fifo.tst", O_WRONLY,0);
if(fd<0||fp<0)
{
printf("errer%d\t%d\n",fd,fp);
return 0;
}
do{
len=read(fp,s, 127) ;
write(fd, s,len);
printf("%s",s);
}while(len>0);
close(fd);
close(fp);
return 0;
}
--------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式