我编写了这个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);
}
}
答案 0 :(得分:1)
您的代码中存在一些错误。
1)为你的buff分配一些大于10的内存。 10还不够。你的字符串大小超过10.我在我的机器上做了20并检查。
2)fgets(req, sizeof(req),stdin);
正在读取字符串末尾的\n
。删除最后一个字符。 req[strlen(req) - 1] = '\0';
有关fgets的手册页,请参阅this