繁体   English   中英

使用 C 语言在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM