Проблема с записью вывода команды ping в текстовый файл в c? - PullRequest
1 голос
/ 31 марта 2011

Ниже приведен мой код, который будет вызываться каждым потоком для записи вывода команды ping в текстовый файл. Файл создан правильно, но в нем ничего нет. На данный момент я не создавал никаких потоков и просто вызывал функцию из main:

customPing("www.google.com", 10, 2, 1);


void customPing(char *url, int test_interval,int samplesPerTest, int testDuration)
{
    printf("-->%s %d(sec) %d %d(hrs)\n", url, test_interval, samplesPerTest, testDuration);

    int durationInProgress = 0,
        durationInSeconds = testDuration * 10,
        n = samplesPerTest;

    char pingCmd[80];
    char filename[10];

    FILE *fptr;

    sprintf(filename, "pingResult%d.txt", fileCounter++);
    fptr = fopen(filename, "a");

    sprintf(pingCmd, "ping -n %d %s >> %s ", n, url,filename);

    printf("ping command: %s\n", pingCmd);

    while (durationInProgress <= durationInSeconds )
    {
        system(pingCmd);

        durationInProgress += test_interval;

        printf("Going to sleep...\n");
        fclose(fptr);
        Sleep(test_interval);
        fptr = fopen(filename, "a");
    }

    printf("***Done***\n");
}

ВЫВОД:


1. Enter url: www.google.ca

2. Enter Testing-Interval(10 sec, 20 sec, etc): 10

3. Test Samples per test (10, 100 etc): 2

4. Start test (yes/no): yes

4. Test Duration ( 1 hr, 24 hrs, etc) 1
        ***Test Starting***
-->www.google.com 10(sec) 2 1(hrs)
ping command: ping -n 2 www.google.com >> pingResult0.txt
The process cannot access the file because it is being used by another process.
Going to sleep...
The process cannot access the file because it is being used by another process.
Going to sleep...
***Done***
Press any key to continue . . .

Есть идеи, что я делаю неправильно ??? Я использую Visual Studio 2008, Win Vista. (Если это помогает) Спасибо.

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Для записи в файл необходимо использовать fprintf, а не printf или sprintf!


Не используйте FILE* операции в вашем коде. Вывод автоматически перенаправляется в правильный файл, и если вы попытаетесь использовать файл изнутри программы одновременно, произойдут плохие вещи.

Просто просто system("cmd >> file"), и вывод «cmd» окажется в файле.

0 голосов
/ 31 марта 2011

почему вы открываете файл в этой программе перед запуском команды ping

Я подозреваю, что ping не может записать в файл, но вы не видите вывод stderr.

запустите команду, затем откройте файл в режиме чтения

...