永发信息网

编写一个shell程序 findit,该程序搜索参数 谁会啊

答案:2  悬赏:60  手机版
解决时间 2021-11-16 21:47
编写一个shell程序 findit,该程序搜索参数 谁会啊
最佳答案

#include
#include
#include
#include
#include
#include
#include
#include

#define BUFSIZE 1024
#define PORT 3333

typedef struct fileinfo {
char fname[50];
long length;
}FILEINFO, *Pfileinfo;


#include "sockcom.h"

int initSocket() {
int sockfd, length;
struct sockaddr_in server;
char buf[BUFSIZE];
sockfd=socket(AF_INET, SOCK_STREAM,0);
if (sockfd<0) error("Error open socket.");
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(PORT);
if (bind(sockfd,(struct sockaddr *)&server, sizeof(server))<0) error("Error bind addr and port.");
length=sizeof(server);
if (getsockname(sockfd, (struct sockaddr *)&server, &length)<0) printf("getting socket name\n");
printf("socket port #%d\n", ntohs(server.sin_port));
listen(sockfd, 5);
return sockfd;
}

int main(int argc, char *argv[])
{
int sockfd, newsockfd, length, n;
char buf[BUFSIZE];
sockfd = initSocket();
while(1) {
newsockfd = accept(sockfd, (struct sockaddr *)0, (int *)0);
int pid;
if ((pid=fork())>0) {
close(sockfd);
bzero(buf, sizeof(buf));
FILEINFO fileinfo;
bzero(fileinfo.fname, sizeof(fileinfo.fname));
if ((n = read(newsockfd, &fileinfo, sizeof(fileinfo)))<0) error("Protocal error.");
printf("Received meta fileinfo, name: %s, length: %d\n", fileinfo.fname, fileinfo.length);
int fd=creat(fileinfo.fname, 0644);
long received=0;
while((n=read(newsockfd, buf, BUFSIZE))>0) {
write(fd, buf, n);
received+=n;
if (received==fileinfo.length) {
break;
}
}
close(fd);
printf("Receive file completed, saved to %s.\n", fileinfo.fname);
exit(0);
}
close(newsockfd);
}
return 0;
}

#include
#include

void error(char *msg) {
printf("%s\n", msg);
exit(1);
}

#include "sockcom.h"

int initSocket(char *rhost) {
int sockfd;
struct sockaddr_in server;
struct hostent *hp, *gethostbyname();
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd<0) error("Error opening stream socket.");
if ((hp=gethostbyname(rhost))==NULL) error("%s Unknow host.", rhost);
server.sin_family = AF_INET;
bcopy((char *)hp->h_addr, (char *)&server.sin_addr.s_addr, hp->h_length);
server.sin_port=htons(PORT);
if(connect(sockfd, (struct sockaddr *)&server, sizeof(server))<0)
error("Error connect to remote server." );
return sockfd;
}

int main(int argc, char *argv[])
{
if (argc!=4) {
error("Usage: client file1 remotehost file2");
}
printf("%s %s %s %s\n", argv[0], argv[1], argv[2], argv[3]);
int n;
char buf[BUFSIZE];
char *filename = argv[1];
FILEINFO fileinfo;
strcpy(fileinfo.fname, argv[3]);
int fd = open(filename, O_RDONLY);
fileinfo.length = lseek(fd,0L,SEEK_END);
printf("Filename: %s, length: %d\n", fileinfo.fname, fileinfo.length);
int sockfd=initSocket(argv[2]);
if(write(sockfd, &fileinfo, sizeof(fileinfo))<0) error("Error sending metadata.");
lseek(fd, 0L, SEEK_SET);
while((n=read(fd, buf, BUFSIZE))>0) {
write(sockfd, buf, n);
}
close(fd);
printf("EOF: disconnect\n");
close(sockfd);
return 0;
}
全部回答
首先vi findit 建立findit 脚本
脚本内容:
#!/bin/sh
if [ -d $1 ]
then
find $1 -print|xargs grep "$2"
else
find . -print|xargs grep "$1"
fi
我想可以实现你的要求。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
给我百度云资源,要链接,
梦之约网咖地址在什么地方,我要处理点事!
同时是2,3,5的倍数
广东金融学院成人高考杨老师高考录取分数多少
临沂布匹市场和纺织品批发市场是一个地方吗
衢州市去河南鲁山坐火车怎么坐
江淮格尔发手刹助力灯亮跑不动怎么回事
秦腔最经典的段子有哪些?
怎么用自己的材料做皮筋动力小车
求2010office 有效的密钥 在线等 急 谢谢!!
宏碁v5573和v5473哪个好
1600KVA变压器10KV高压线路需要多大的真空断
已知x>1,y>0,且2/(x-1)+1/y =2
赵铁锤的任职简历
古剑2大神,十二是谁
推荐资讯
0.6吨:1.4千克最简比值
赊销产品的会计分录
以李开头的成语
求大真探全集百度云资源共享其他地方看太卡
杨华村地址好找么,我有些事要过去,
求教中国移动社会渠道经理怎么样?我今年刚毕
风水从坟边自然的堆起土来
手机一直开不了机一直出现colorOS恢复模式怎
佛山德方纳米科技有限公司怎么样,有谁知道,
奶茶里的奶精和水是多少比例
海贼王打银狐福克斯的时候乔巴是被输过去了,
现在在 大邑买房哪个楼盘好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?