Что означает постфикс в pthread_np.h
Что означает постфикс в pthread_np.h?
Что означает постфикс в pthread_np.h?
Каким способом можно создать приостановленный поток в Linux?
Почему буква ё в таблице Unicode идет не по алфавиту?
Дистрибути́в операцио́нной систе́мы — это форма распространения системного программного обеспечения. Наличие дистрибутивов вызвано тем, что форма программного обеспечения, используемая для его распространения, почти никогда не совпадает с формой программного обеспечения работающей системы.
Что подразумевается формой программного обеспечения в формулировке понятия выше? Спасибо.
В заголовоном файле sys/stat.h определены семейство констант S_IWUSR, S_IRUSR, .. и т.д. Сокращения каких английских слов являются буквы S и I? Заранее благодарю за ответ.
В линукс есть семейство функций(out, in) для работы с портами ввода/вывода. Какое общее количество портов ввода/вывода и чем обусловлена эта цифра? Заранее благодарю за ответ.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <wait.h>
#include <time.h>
int fd[100][2];
fd_set read_set;
struct timeval val;
int main(int argc, char *argv[], char *env[]) {
val.tv_sec = 0;
val.tv_usec = 0;
for (int i = 0; i < 10; ++i) {
pipe(fd[i]);
FD_SET(fd[i][0], &read_set);
}
printf("%d\n", select(30, &read_set, NULL, NULL, &val));//если эту строчку закомментировать, ожидаемый результат будет совпадать с результатом работы программы(выведет 10)
for (int i = 0; i < 10; ++i) {
write(fd[i][1], "sad", 2);
}
printf("%d\n", select(30, &read_set, NULL, NULL, &val));
return 0;
}
Вывод: два нуля. Правильно ли я понимаю, что функция select модифицирует передаваемые ей множества дескрипторов(исключает те дескрипторы, которые заблокированы для чтения/записи)? Задаю данный вопрос, тк соответствующей информации в мане не нашел.
Правильно ли я понимаю, что в каждом выполняющемся процессе есть буфер для каждого потока(stdin, stdout, stderror), в который соответствующий поток заносит информацию?
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <climits>
#include <set>
#include <utility>
#include <string>
#include <list>
#include <errno.h>
#include <sys/stat.h>
#include <dirent.h>
#include <map>
#include <cstring>
#include <sys/wait.h>
#include <utility>
#include <signal.h>
#include <sys/types.h>
#include <sys/time.h>
using namespace std;
fd_set fdread;
int main() {
FD_ZERO(&fdread);
int fd[2];
pipe(fd);
pipe(fd);
pipe(fd);
pipe(fd);
pipe(fd);
pipe(fd);
pipe(fd);
FD_SET(fd[0], &fdread);
write(fd[1], "sdssds", 6);
printf("%d\n", fd[1]);
int x = select(50, &fdread, NULL, NULL, NULL);
printf("%d", x);
return 0;
}
Как вы заметили из кода выше в множестве дескрипторов нету 1.Почему select всегда возвращает дескриптор на стандартный вывод т.е 1?
Вопрос в теме. 1 - waitpid(-1, &status, 0); 2 - убить родителя
Какие способы вы еще знаете?
Если я не ошибаюсь, при вызове функции read для пустого неименованного канала, то функция будет ожидать ввод данных в неименованный канал. Можно ли сделать так, чтобы функция не ожидала ввод данных?
Требуется сделать копию файла. Я делаю это с помощью 10ти потоков(функция потока привел ниже). Проблема в том, что скорость копирования на порядок ниже чем у утилиты cp. В чем может быть причина проблемы?
struct argument {
FILE *fin, *fout;
bool done;
} argument;
void *tread_function(void *arg) {
struct argument *p = (struct argument *)arg;
FILE *fin = p->fin, *fout = p->fout;
signed char byte;
do {
sem_wait(&semaphore);
byte = fgetc(fin);
if (!feof(fin)) fputc(byte, fout);
sem_post(&semaphore);
} while (!feof(fin));
p->done = 1;
}
Вопрос в следующем: каким образом можно подождать завершение выполнение detach потока(pthread_detach) в main потоке? Заранее спасибо.
Я столкнулся с проблемой, что внутри функции потока некоторые файлы не закрываются и в дальнейшем я получая ошибку «Too many open files». Одновременно может работать от 10 потоков. Потоки не синхронизированы(но я так понимаю это не является причиной моей проблемы). С чем связано не закрытие некоторых файлов? Функция потока(считает количество совпадений байт в заданной последовательности в файле):
void *thread_function(void *arg) {
FILE *f;
struct thread_info *p = (struct thread_info*)arg;
if ((f = fopen(p->path, "rb")) != NULL) {
int i = 0, res = 0, count = 0;
char byte;
while (!feof(f)) {
++count;
fscanf(f, "%c", &byte);
if (byte == sequence[i]) ++i;
else i = 0;
if (i == strlen(sequence)) {
i = 0;
++res;
}
}
if (fclose(f) != 0) print_error(p->path);
printf("%lu %s %d %d %d\n", syscall (SYS_gettid), p->path, count, res, tread_list.size());
} else print_error(p->path);
p->number = 0;
}
Правильно я понимаю, что маска обработчика блокирует соответствующие в ней сигналы?
sa_mask specifies a mask of signals which should be blocked (i.e.,
added to the signal mask of the thread in which the signal handler is
invoked) during execution of the signal handler. In addition, the
signal which triggered the handler will be blocked, unless the
SA_NODEFER flag is used.
В каких случаях setpgid() дает ошибку в заголовке? Когда переносим чайлда в другую группу?
http://pastebin.com/TJHGbc9m три подряд идущие команды начиная с 120 строчки работают неверно. Это можно проверить вставив скомпилировав исходник. Сама программа представляет дерево процессов 1->2,3,4,5->6,7,8, которые в свою очередь перебрасываются по циклу сигналами. Собственно вопрос в следующем: с чем связана неверная работа команды setpgid?
Процесс может состоять только в одной группе процессов? Еще вопрос. Я так полагая pid лидера группы процессов совпадает с номером группы. Кто станет лидером группы после смены группы процессов лидером командой setpgid?
После перенаправления(freopen) потока stdout в файл связь с консолью теряется. Как после перенаправления потока в файл восстановить эту связь?
Собственно, как можно сделать чтобы, после нахождения файла в директории(find /dir -type f) выводился через пробел pid процесса($$), полный путь файла, количество слов в нем(wc -w) и его размер(stat -c%s). Заранее благодарен.
следующие → |