C 正在创建文件,但未将数据推入文件

C 正在创建文件,但未将数据推入文件,c,C,我编写了这个C程序,它将系统调用作为输入,如ps-f或ls/tmp,然后将系统调用的输出推送到一个文件,然后从该文件读取并显示输出 此处正在创建输出文件/tmp/j,但其中没有数据。有人能帮我解决这个问题吗?提前谢谢 我的节目 #include<stdio.h> #include<sys/syscall.h> #include <stdlib.h> main() { enum msgtype {PROCESS_LIST_REQUEST=1, PROC

我编写了这个C程序,它将系统调用作为输入,如
ps-f或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);
    }
}
#包括
#包括
#包括
main()
{
枚举msgtype{PROCESS_LIST_REQUEST=1,PROCESS_LIST_RESPONSE,DIRECTORY_LIST_REQUEST,DIRECTORY_LIST_RESPONSE,ERROR_REQUEST};
结构头{
int版本;
int msg_长度;
int头长度;
枚举msgtype msg_类型;
字符数据;
字符*reqtype;
};
结构头*buf;
字符buff[10];
buf=malloc((sizeof(结构头));
buf->reqtype=malloc(40);
字符请求[10];
printf(“在控制台上键入ps-f\n”);
fgets(要求,尺寸(要求),标准尺寸);
buf->reqtype=req;
printf(“%s”,buf->reqtype);
snprintf(buff,sizeof(buff),%s>/tmp/j”,buf->reqtype);
printf(“%s\n”,浅黄色);
系统(buff);
{
文件*fp;
字符c;
fp=fopen(“/tmp/j”,“r”);
如果(fp==NULL)
printf(“文件不存在\n”);
其他的
{
做{
c=getc(fp);/*从文件中获取一个字符*/
putchar(c);/*在监视器上显示它*/
}while(c!=EOF);/*重复,直到EOF(文件结束)*/
}
fclose(fp);
}
}

您的代码中有几个错误

1) 为你的buff分配一些大于10的内存。10美元是不够的。您的字符串超过了10的大小。我在我的机器里做了20次检查

2)
fgets(要求、尺寸(要求)、标准输入)
正在读取字符串末尾的
\n
。删除最后一个字符<代码>请求[strlen(请求)-1]='\0'


参见fgets手册页

/*将其显示在监视器上*/
是一个相当奇怪的注释,因为
putchar
写入标准输出,而标准输出不一定总是监视器。文件“/tmp/j”被打开以供读取。它写在哪里?@self是的,我把它放在这里只是为了了解我自己,对此很抱歉。@Ramana“j”是文件名,“tmp”是文件夹名。它被写入名为“j”的文件中。这里的代码似乎是从这个文件中读取的。但是这个问题和评论是关于写入这个文件的。我在系统调用中的程序到达fopen阶段之前遇到了这个问题。包含
ps-f>/tmp/j
的字符串
buff
应该执行
ps-f
并将输出推送到
/tmp/j
,但是这里创建了文件“j”但是没有系统调用的数据或输出。@南丹请通过进行这些更改进行检查。它编译并给了我输出