[英]How to find the callers and callee of a function in C code in vi/vim?
[英]Open file in vi/vim using C language
你好! 我是 C 语言的新手,很抱歉。 我的程序必须创建一个新的文本编辑器实例(例如 vi) - 并在其中打开一个文件,用户将给出其名称作为调用程序的参数。 如果用户没有提供要打开的文件名,则应该打开一个“空”笔记本。
我已经在 C 中打开 vi 编辑器。 我只需要知道是否可以使用 C 语言在 vi 或 vim 中打开文件?
有我的代码
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
FILE *fp;
int childpid;
int count1 = 0, count2 = 0;
fp = fopen(argv[1], "a");
if(fp == NULL) {
char *exe_name = "vi", *message = "Empty notebook is running.";
char *exe_args[] = { exe_name, message, argv[0], NULL };
execv("/usr/bin/vi", exe_args);
}
printf("Before it forks");
sleep(5);
childpid = fork();
if(childpid == 0) {
printf("This is a child process\n");
while(count1 < 10) {
printf("Child Process: %d\n", count1);
sleep(1);
count1++;
}
} else {
printf("This is the parent process\n");
while(count2 < 20) {
printf("Parent Process: %d\n", count2);
sleep(1);
count2++;
}
}
fclose(fp);
return 0;
}
十分感谢!
是的,你绝对可以,但是我愿意。 首先检查您如何打开“空”笔记本。 您的exec_args[]
包含以下内容:
["vi", "Empty notebook is running.", argv[0], "\0"]
argv[0]
是您的 C 可执行文件的名称,因此假设它是a.out
。 因此,当execv()
时,您实际上是在运行以下命令:
/usr/bin/vi Empty\ notebook\ is\ running a.out
您正在打开两个文件进行编辑,一个名为“Empty notebook is running”的文件。 (请注意斜杠以转义上述命令中的空格),以及您制作的 C 可执行文件。 我不认为你打算打开这两个,因为你通常不应该弄乱实际的可执行文件。 此外,一旦您对“空笔记本正在运行”进行更改。 文件,下次运行程序时,您将看到这些更改!
所以,我建议你根本不要传递文件名。 这样, vi
打开就好像用户自己从未传入文件名一样。
要打开现有文件(仅此而已),您可以简单地将 and else
子句添加到文件描述符的检查中。 因此,代码可能类似于:
if(fp == NULL)
{
char *exec_args[] = {"vi", NULL};
execv("/usr/bin/vi", exec_args);
}
else
{
char *exec_args[] = {"vi", argv[1], NULL};
execv("/usr/bin/vi", exec_args);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.