文件正在创建,但数据不会被压入文件

时间:2015-10-28 05:45:55

标签: c

我编写了这个C程序,它将系统调用作为输入,如ps -f or ls /tmp等,系统调用的输出被推送到文件,然后从它读取的文件中显示输出。

此处输出文件已创建/tmp/j但其中没有数据。有人可以帮我解决这个问题,并提前致谢。

我的节目。

#include<stdio.h>
#include<sys/syscall.h>
#include <stdlib.h>

main()
{
    enum msgtype {PROCESS_LIST_REQUEST=1, PROCESS_LIST_RESPONSE, DIRECTORY_LIST_REQUEST, DIRECTORY_LIST_RESPONSE, ERROR_REQUEST};
    struct head{
        int version;
        int msg_length;
        int header_length;
        enum msgtype msg_type;
        char data;
        char *reqtype;
    };

    struct head *buf;
    char buff[10];

    buf = malloc((sizeof(struct head)));
    buf->reqtype=malloc(40);

    char req[10];
    printf("type ps -f on the console \n");
    fgets(req, sizeof(req),stdin);
    buf->reqtype = req;
    printf("%s" , buf->reqtype);
    snprintf(buff, sizeof(buff), "%s>/tmp/j", buf->reqtype);
    printf("%s \n",buff);
    system(buff);
    {
        FILE *fp;
        char c;
        fp = fopen("/tmp/j", "r");
        if (fp == NULL)
            printf("File doesn't exist\n"); 
        else
        {
            do {
                c = getc(fp); /* get one character from the file*/
                putchar(c); /* display it on the monitor*/
            } while (c != EOF); /* repeat until EOF (end of file)  */
        }
        fclose(fp);
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误。

1)为你的buff分配一些大于10的内存。 10还不够。你的字符串大小超过10.我在我的机器上做了20并检查。

2)fgets(req, sizeof(req),stdin);正在读取字符串末尾的\n。删除最后一个字符。 req[strlen(req) - 1] = '\0';

有关fgets的手册页,请参阅this