Вы ошибаетесь.
Единственным свойством , которое находится в файловом дескрипторе -и которое можно изменить с помощью fcntl(F_SETFD)
, является FD_CLOEXEC
закрытие -флага -exec.
Все остальные свойства относятся либо к файловому объекту (, «описанию открытого файла» в жаргоне POSIX --, которое можно изменить с помощью fcntl(F_SETFL)
), либо к индексному узлу.
Установка флага отсутствия блокировки -с помощью fcntl(F_SETFL, | O_NONBLOCK)
или с помощью ioctl(FIONBIO)
повлияет на все файловые дескрипторы, которые ссылаются на этот открытый файл. Также нет способа сделать файл неблокирующим -только для чтения или записи.
Это далеко от идеала --вы также можете обратиться к этому вопросам и ответам на StackOverflow, особенно к ссылке на lkml обсуждение о неудачной попытке как-то исправить.
Обратите внимание, что обычные файлы в основном не -блокируют --, а poll(2)
или select(2)
на них будут возвращены немедленно.
Если вас интересуют только сокеты, вы должны использовать send(2)
или recv(2)
с флагом MSG_DONTWAIT
вместо read(2)
или write(2)
. Вопреки тому, что вы говорите, дескриптор файла сокета может использоваться совместно между процессами и независимо от его семейства/протокола/параметров. И это также относится к прослушивающему сокету.
-121 ---234860 -
Не уверен, что вызывает ошибку (не знаком ни с одним из них ), но на странице темы vimix есть несколько комментариев, сообщающих о проблеме.https://www.gnome-look.org/p/1276216/
Автор vimix сообщает, что исправит это в ближайшем обновлении. Возможно, он изучает причину проблемы. Кроме того, в описании упоминается обходной путь решения проблемы. Если окажется, что это ошибка в компоненте xfce, об этом необходимо сообщить команде xfce.
Если у вас есть только несколько имен сэмплов, вы можете сделать это вручную:
cat folder*/952_53929_S*_R1_*.fastq.gz > 952_53929_combined_L001_R1_001.fastq.gz
cat folder*/952_53929_S*_R2_*.fastq.gz > 952_53929_combined_L001_R2_001.fastq.gz
cat folder*/952_56890_S*_R1_*.fastq.gz > 952_56890_combined_L001_R1_001.fastq.gz
cat folder*/952_56890_S*_R2_*.fastq.gz > 952_56890_combined_L001_R2_001.fastq.gz
Если у вас больше, это не очень практично. Таким образом, вы можете вместо этого собирать имена самостоятельно:
$ for f in */952_*.fastq.gz; do fname=$(basename "$f"); echo ${fname%%_S*} ; done | sort | uniq
952_53929
952_56890
Это даст вам ваши префиксы, и поэтому вы можете сделать:
for f in */952_*.fastq.gz; do
fname=$(basename "$f");
echo ${fname%%_S*} ;
done |
sort |
uniq |
while read prefix; do
cat */"$prefix"*_R1_*.fastq.gz > "$prefix"_combined_L001_R1_001.fastq.gz;
cat */"$prefix"*_R2_*.fastq.gz > "$prefix"_combined_L001_R2_001.fastq.gz;
done