Linux C问题,线上等,急用

用命名管道分别写一个服务器程序和一个客户机程序,客户机的父进程负责产生一个子进程,子进程则往FIFO写入自己的PID号码以及一条当前的系统时间。服务器负责从该FIFO中读... 用命名管道分别写一个服务器程序和一个客户机程序,客户机的父进程负责产生一个子进程,子进程则往FIFO写入自己的PID号码以及一条当前的系统时间。服务器负责从该FIFO中读取数据并将之打印到屏幕上。 展开
 我来答
double_crane
2013-12-30 · TA获得超过3824个赞
知道小有建树答主
回答量:1106
采纳率:0%
帮助的人:917万
展开全部

产生进程 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(&lt);

    /*以格林威治时间的字符串方式打印*/
    printf(asctime(ptr));

    /*以本地时间的字符串方式打印*/
    printf(ctime(&lt));
    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); 
}

 

不过看你说到 还客户机服务器

应该还用到网络编程吧

这个你自己看吧,我水平太低,网络编程的忘了

追问

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式