gpt4 book ai didi

c - 系统调用未将输出解析到 c 中的文件,已创建文件但文件内没有数据

转载 作者:行者123 更新时间:2023-11-30 15:16:05 27 4
gpt4 key购买 nike

我编写了一段小代码,它接受用户的输入并将其传递给系统(“command>/tmp/j”),这里正在创建文件 j,但其中没有与输入相关的信息存在于命令中。例如:如果我将 ps -f 作为字符串命令的输入,则 system() 应该执行它并将其存储在文件/tmp/j 中,但是这里正在创建 文件 j 但里面没有输出数据。

我见过很多问题,但所有这些问题都使用 popen() 并且输入是在其中预定义的。

#include<stdio.h>
#include<sys/syscall.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;
buf = malloc((sizeof(struct head)));
buf->reqtype=malloc(40);
char req[10];
char *command;
command = malloc((sizeof(char) * 10));
fgets(req, sizeof(req),stdin);
buf->reqtype = req;
printf("%s" , buf->reqtype); //just to make sure correct thing is present
command = buf->reqtype;
printf("%s",command);//just to make sure correct thing is present
system ("command>/tmp/j");
{
FILE *fp;
char c;
fp = fopen("/tmp/j", "r");
if (fp == NULL)
printf("File doesn't exist\n");
else {
do {
c = getc(fp);
putchar(c);
} while (c != EOF);
}
fclose(fp);
}
}

最佳答案

这一行

  system ("command>/tmp/j");

尝试运行一个名为command的可执行文件,并将其输出重定向到/tmp/j。发生重定向,从而创建文件 /tmp/j,但随后 command(无论它是什么)不会产生任何输出。

还有这个

  command = malloc((sizeof(char) * 10));

接下来是这个

  command = buf->reqtype;

导致 malloc() 调用中的内存泄漏。

关于c - 系统调用未将输出解析到 c 中的文件,已创建文件但文件内没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com