使用C语言在vi/vim中打开文件



你好我是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 processn");
while(count1 < 10) {
printf("Child Process: %dn", count1);
sleep(1);
count1++;
} 
} else {
printf("This is the parent processn");
while(count2 < 20) {
printf("Parent Process: %dn", count2);
sleep(1);
count2++;
} 
}
fclose(fp);
return 0;
}

非常感谢!

是的,你绝对可以!然而,我想先检查一下你是如何打开"空"笔记本的。您的exec_args[]包含以下内容:

["vi", "Empty notebook is running.", argv[0], ""]

argv[0]是C可执行文件的名称,因此假设它是a.out。因此,当调用execv()时,实际上是在运行以下命令:

/usr/bin/vi Empty notebook is running a.out 

您正在打开两个文件进行编辑,一个名为"Empty notebook is running"的文件(注意上面命令中用斜线转义空格(,以及您制作的C可执行文件。我认为您不打算同时打开这两个文件,因为您通常不应该处理实际的可执行文件。此外,一旦您对"Empty notebook is running."文件进行了更改,下次运行程序时,您将看到这些更改!

因此,我建议您根本不要传递文件名。这样,vi打开时就好像用户自己从未传入文件名一样。

要打开现有文件(而不打开其他文件(,只需在文件描述符的检查中添加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);
}

最新更新