Коллеги!
Столкнулся я вот с чем, если собрать на FreeBSD 5.2 любую C-программку с ключом -pthread (gcc -my.c -pthread), тогда дескрипторы 0,1,2 как и положено stdin,stdout,stderr, а вот #3 и #4 вместо того, чтобы быть закрытыми, на самом деле открыты! Т.е. я пробовал dup2(0,3) - и результат Bad file descriptor (9). Если-же убрать -pthread -все работает. Что это может быть?
>Коллеги!
>Столкнулся я вот с чем, если собрать на FreeBSD 5.2 любую C-программку
>с ключом -pthread (gcc -my.c -pthread), тогда дескрипторы 0,1,2 как и
>положено stdin,stdout,stderr, а вот #3 и #4 вместо того, чтобы быть
>закрытыми, на самом деле открыты! Т.е. я пробовал dup2(0,3) - и
>результат Bad file descriptor (9). Если-же убрать -pthread -все работает.
>Что это может быть?
>Какой-нибудь pipe?
>Какой-нибудь pipe?
Я не точно понял :( Если сделать так:if( fstat(3,&sb) < 0)
{
printf("fstat(3): %s (%i)\n",strerror(errno),errno);
exit(1);
}
printf("dev: %i, inod: %i, uid: %i, gid: %i, rdev: %i\n",
sb.st_dev,sb.st_ino,sb.st_uid,sb.st_gid,sb.st_rdev);то вывод выглядит следующим образом
dev: 0, inod: 0, uid: 0, gid: 0, rdev: 0А вот дальше как интерпретировать это?
>>Какой-нибудь pipe?
>Я не точно понял :(Я имел в виду следующее _предположение_: дескрипторы 3 и 4 могут резервироваться для каких-то внутренних коммуникаций в pthreads-программе. То, что их сразу два, навело на мысль о двустороннем канале. Но тогда это должно быть отражено где-то в документации на pthreads.
>>Я не точно понял :(
это относилось не к предположению, что это pipe, а к тому, что я точно не понял что это за каналы. А сама мысль что это какой-то обмен между потоками ИМХО правильная. Только где взять описание pthread для FreeBSD 5.2?