Закройте указатель ФАЙЛА, не закрывая базовый дескриптор файла

Пример C++:

char temp[512];
sprintf(temp, "command -%s -%s", parameter1, parameter2);
system((char *)temp);

пример C#:

    private static void RunCommandExample()
    {
        // Don't forget using System.Diagnostics
        Process myProcess = new Process();

        try
        {
            myProcess.StartInfo.FileName = "executabletorun.exe";

            //Do not receive an event when the process exits.
            myProcess.EnableRaisingEvents = false;

            // Parameters
            myProcess.StartInfo.Arguments = "/user testuser /otherparam ok";

            // Modify the following to hide / show the window
            myProcess.StartInfo.CreateNoWindow = false;
            myProcess.StartInfo.UseShellExecute = true;
            myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;

            myProcess.Start();

        }
        catch (Exception e)
        {
            // Handle error here
        }
    }
16
задан Matt Joiner 21 October 2009 в 22:01
поделиться

2 ответа

Если вы работаете в системе POSIXy (как я предполагаю, поскольку у вас есть fileno () ), вы можете использовать dup () для клонирования файлового дескриптора:

int newfd = dup(fileno(stream));
fclose(stream);

Или вы можете передать fdopen () дублированный файловый дескриптор:

FILE *stream = fdopen(dup(fd), "r");

В любом случае другая копия fd не закроется с ФАЙЛ * . Однако имейте в виду, что указатель местоположения является общим, поэтому будьте осторожны, если вы используете оба одновременно. Также,

21
ответ дан 30 November 2019 в 22:02
поделиться

Если ничего не помогает, dup (2) может помочь.

1
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: