【发布时间】:2014-02-19 10:44:28
【问题描述】:
我正在尝试编写一个处理进程的程序。 将提示用户..
shell: start emacs file.c
Process 346 has started.
我在使用 fgets 时遇到了一些问题,因为我不知道该放什么作为我的第三个参数(我希望它从命令行/argv 中获取)
fgets(buffer, 4096, 如果我不做文件,如何做一个文件指针,只是 argv?)
int main(int argc, char **argv)
{
while(1) {
printf("shell: ");
int status, pid;
int i=0;
char buffer[4097];
fgets(buffer, 4096, ???? ) //I want it to take in from argv. Do I need to declare 4096?
if(strcmp(argv[1],"start") == 0 )
{ printf("myshell: process has started \n");
while (str = strtok(buffer," ") = NULL) //??? What do I declare str as?
argv[i] = str;
i = i+1;
}
if ((pid = fork()) < 0) { //Child process fork
perror("fork");
exit(1);
}
if (pid == 0) { //Child executes code
execvp(argv[0], argv );
perror(argv[1]); //argv1?
exit(1);
}
}
对于上述所需的行为,这是否有意义?我不完全确定具有 strtok 的 while 循环的位置,不知道它是否可能必须在 if 语句之外。
另外,将我的 strtok 函数称为 strtok(buffer, " ") 是否正确?谢谢。
【问题讨论】:
-
听起来有人需要阅读一些手册页...
-
char buffer[4097]; fgets(buffer, sizeof buffer, ... -
为了澄清,我确实在手册页中看到第三个参数是“FILE * 限制流”,但我不知道究竟是什么,因为我不接受任何文件输入并且通常它是一个指向文件的指针。
-
@user3295684 你说启动 emacs file.c 所以你的第三个参数是 file.c。因此,假设您首先打开该文件并在 fgets 函数的第三个参数中传递该文件的 FILE 指针。
-
@JKB 知道了,就像 FILE *src = fopen(argv[3],"r"); fgets(缓冲区,MAX,src);谢谢!