Форум программистов, компьютерный форум, киберфорум
Наши страницы

С под Linux

Войти
Регистрация
Восстановить пароль
 
Nickolay0512
57 / 39 / 19
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
#1

Файлы. Создание и размещение небольшого текста, создание двух дочерних процессов, вывод результи- рующего файла на экран - C Linux

24.02.2014, 18:26. Просмотров 987. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста с программой.
Разработайте программу, выполняющую:
1) создание файла и размещение в нем небольшого текста;
2) создание двух дочерних процессов, каждый из которых
выполняет запись в файл из п. 1 своих переменных окружения,
предварительно внеся в некоторые из них любые изменения. После
этого дочерний процесс завершается;
3) дождавшись завершения обоих потомков, вывод результи-
рующего файла на экран
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 18:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Файлы. Создание и размещение небольшого текста, создание двух дочерних процессов, вывод результи- рующего файла на экран (C Linux):

Создание двух дочерних процессов - C Linux
Я всю программу сделал, но создал только 1 дочерний. Как сделать их 2 и более? Уже 3-й час не могу разобраться. Вот мое : #include...

Вывод pid дочерних процессов - C Linux
Всем доброго вечера. Проблема следующая:есть процесс, порождающий несколько процессов.Те в свою очередь порождают еще...

Создание дочерних процессов. Пайпы - C++ Linux
Здравствуйте, подскажите, пожалуйста, что не так. Есть программа, сортирующая файл: sort.cpp #include <stdio.h> #include...

Создание файла на диске, форматирование и вывод на экран - Assembler
Используя оболочку masm, создать программу, которая: создаёт на диске файл, делает в него несколько записей и закрывает файл. Затем...

Создание файла. Организуйте вывод на экран монитора номер телефона по введенной с клавиатуры фамилии - Pascal
Создайте файл содержащий следующие поля 1)Номер 2)Фамилию 3)Телефон Организуйте вывод на экран монитора номер телефона по введенной...

Создание небольшого счетчика - Delphi
Создание не большого счетчика ,т.е мне нужно ввести логин и пароль , но при этом если я введу 3 раза неправильный пароль программа должна...

9
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
25.02.2014, 14:57 #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
 
int main() {
    const char CFile[] = "file.txt";
    char text[64] = "Base text";
    FILE* f;
 
    if ((f = fopen(CFile, "w")) == NULL) {
        perror("file.txt");
        return EXIT_FAILURE;
    }
 
    fprintf(f, "%s\n", text);
    fclose(f);
 
    switch (fork()) {
        case -1:
            perror("fork");
            return EXIT_FAILURE;
 
        case 0:
            if ((fork() != -1) && (f = fopen(CFile, "a"))) {
                sprintf(text, "Text from ppid(%d)", getppid());
                fprintf(f, "%s\n", text);
                fclose(f);
            }
            break;
 
        default:
            wait(NULL);
            if ((f = fopen(CFile, "r"))) {
                while (fgets(text, sizeof(text), f)) {
                    printf("%s", text);
                }
                fclose(f);
            }
    }
 
    return EXIT_SUCCESS;
}
1
Nickolay0512
57 / 39 / 19
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
26.02.2014, 10:56  [ТС] #3
anmartex, а как сделать то же самое только через системные вызовы?
0
korvin_
2010 / 1497 / 235
Регистрация: 28.04.2012
Сообщений: 5,377
26.02.2014, 11:23 #4
Если не ошибаюсь, fork, fopen, fclose — это и есть системные вызовы.
0
Nickolay0512
57 / 39 / 19
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
26.02.2014, 11:26  [ТС] #5
korvin_, я просто видел еще вместо fopen, fclose просто open и close. Или это одно и то же?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 12:15 #6
fopen, fclose - функции буферизированного ввода/вывода, а вот open и close не буферизированы и не являются частью стандарта ISO C, но определены в стандарте POSIX.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
 
int main() {
    const char CFile[] = "file.txt";
    char text[64] = "Base text\n";
    ssize_t len;
    int f;
 
    if ((f = open(CFile, O_WRONLY | O_TRUNC| O_CREAT, 0666)) == -1) {
        perror(CFile);
        return EXIT_FAILURE;
    }
 
    write(f, text, strlen(text));
    close(f);
 
    switch (fork()) {
        case -1:
            perror("fork");
            return EXIT_FAILURE;
 
        case 0:
            if ((fork() != -1) && ((f = open(CFile, O_WRONLY | O_APPEND)) != -1)) {
                sprintf(text, "Text from ppid(%d)\n", getppid());
                write(f, text, strlen(text));
                close(f);
            }
            break;
 
        default:
            wait(NULL);
            if ((f = open(CFile, O_RDONLY)) != -1) {
                while ((len = read(f, text, sizeof(text)))) {
                    printf("%.*s", len, text);
                }
                close(f);
            }
    }
 
    return EXIT_SUCCESS;
}
1
Nickolay0512
57 / 39 / 19
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
26.02.2014, 12:17  [ТС] #7
anmartex, а какая между ними разница? Получается, что и open, close и fopen, fclose являюся системными вызовами?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 12:22 #8
Цитата Сообщение от Nickolay0512 Посмотреть сообщение
anmartex, а какая между ними разница? Получается, что и open, close и fopen, fclose являюся системными вызовами?
Цитата Сообщение от anmartex Посмотреть сообщение
fopen, fclose - функции буферизированного ввода/вывода, а вот open и close не буферизированы и не являются частью стандарта ISO C, но определены в стандарте POSIX.
По простому:
1. fopen/fclose и все остальные операции используют промежуточный буфер
2. fopen/fclose идут в коробке с C

А вот open/close не буферизируются и являются частью API UNIX-подобных ОС (POSIX)
1
Nickolay0512
57 / 39 / 19
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
26.02.2014, 19:28  [ТС] #9
anmartex, Покажите, пожалуйста, как сделать в этой же программе любое из нижеприведенных заданий:
a) вывод на экран количества слов в файле
b) вывод на экран строк с заданным ключевым словом
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
27.02.2014, 05:45 #10
Цитата Сообщение от Nickolay0512 Посмотреть сообщение
a) вывод на экран количества слов в файле
Функция подсчёта количества слов:
C
1
2
3
4
5
6
7
8
9
size_t CountWords(char* text, const char* delim) {
    size_t count = 0;
    char* p = strtok(text, delim);
    while (p) {
        count++;
        p = strtok(NULL, delim);
    }
    return count;
}
где, text - сам текст, delim - разделители слов.
1
27.02.2014, 05:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 05:45
Привет! Вот еще темы с ответами:

Создание небольшого тестовика - Delphi
Задача:написать программу, которая бы считывала данные из текстового документа в массив и выдавала в виде теста следующим образом: все,...

Подскажите как сделать так, чтобы после порождения двух дочерних процессов, процесс-отец завершался - C Linux
Есть программа в которой процесс-отец, порождает два дочерних процесса. Подскажите как сделать так, чтобы после порождения двух дочерних...

Создание сети для небольшого офиса - Сети
Добрый день. Данную тему создал для того, чтобы задать несколько вопросов и получить подтверждения/корректировки относительно создания...

Создание задания, добавление процессов, удаление процессов - C++ WinAPI
Здравствуйте. Уже который день бьюсь со своей лабораторной работой - не получается, и все. Идея следующая. При запуске, программа должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru