Linux C问题,线上等,急用
用命名管道分别写一个服务器程序和一个客户机程序,客户机的父进程负责产生一个子进程,子进程则往FIFO写入自己的PID号码以及一条当前的系统时间。服务器负责从该FIFO中读...
用命名管道分别写一个服务器程序和一个客户机程序,客户机的父进程负责产生一个子进程,子进程则往FIFO写入自己的PID号码以及一条当前的系统时间。服务器负责从该FIFO中读取数据并将之打印到屏幕上。
展开
1个回答
展开全部
产生进程 fork
创建管道 mkfifo
pid就是getpid getppid
读取时间函数有 gmtime ctime等等
写是懒得写,给你一些简单的示例吧
时间的
//1
#include <time.h>
#include <stdio.h>
int main(void){
struct tm *local;
time_t t;
/* 获取日历时间 */
t=time(NULL);
/* 将日历时间转化为本地时间 */
local=localtime(&t);
/*打印当前的小时值*/
printf("Local hour is: %d\n",local->tm_hour);
/* 将日历时间转化为格林威治时间 */
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}
//2
#include <time.h>
#include <stdio.h>
int main(void)
{
struct tm *ptr;
time_t lt;
/*获取日历时间*/
lt=time(NULL);
/*转化为格林威治时间*/
ptr=gmtime(<);
/*以格林威治时间的字符串方式打印*/
printf(asctime(ptr));
/*以本地时间的字符串方式打印*/
printf(ctime(<));
return 0;
}
fork的
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>
/* 进程创建 */
void main(void)
{
pid_t child;
int status;
printf("This will demostrate how to get child status\n");
/* 创建子进程 */
if((child=fork())==-1)
{
printf("Fork Error : %s\n", strerror(errno));
exit(1);
}
else if(child==0) // 子进程
{
int i;
printf("I am the child: %s\n", getpid());
for(i=0;i<1000000;i++) sin(i);
i=5;
printf("I exit with %d\n", i);
exit(i);
}
while(((child=wait(&status))==-1)&(errno==EINTR)); //子进程未结束
if(child==-1)
printf("Wait Error: %s\n", strerror(errno));
else if(!status) // 子进程退出值为0
printf("Child %ld terminated normally return status is zero\n", child);
else if(WIFEXITED(status)) // 子进程退出值0
printf("Child %ld terminated normally return status is %d\n", child, WEXITSTATUS(status));
else if(WIFSIGNALED(status)) // 子进程未获信号而退出
printf("Chlid %ld terminated due to signal %d not caught\n", child, WTERMSIG(status));
}
管道的 fifo_read
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO "/tmp/myfifo"
main(int argc,char** argv)
{
char buf_r[100];
int fd;
int nread;
/* 创建管道 */
if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
printf("cannot create fifoserver\n");
printf("Preparing for reading bytes...\n");
memset(buf_r,0,sizeof(buf_r));
/* 打开管道 */
fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
if(fd==-1)
{
perror("open");
exit(1);
}
while(1)
{
memset(buf_r,0,sizeof(buf_r));
if((nread=read(fd,buf_r,100))==-1)
{
if(errno==EAGAIN)
printf("no data yet\n");
}
printf("read %s from FIFO\n",buf_r);
sleep(1);
}
pause(); /*暂停,等待信号*/
unlink(FIFO); //删除文件
}
fifo_write
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO_SERVER "/tmp/myfifo"
main(int argc,char** argv)
{
int fd;
char w_buf[100];
int nwrite;
/*打开管道*/
fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);
if(argc==1)
{
printf("Please send something\n");
exit(-1);
}
strcpy(w_buf,argv[1]);
/* 向管道写入数据 */
if((nwrite=write(fd,w_buf,100))==-1)
{
if(errno==EAGAIN)
printf("The FIFO has not been read yet.Please try later\n");
}
else
printf("write %s to the FIFO\n",w_buf);
}
不过看你说到 还客户机服务器
应该还用到网络编程吧
这个你自己看吧,我水平太低,网络编程的忘了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询