#c #linux #splice
Вопрос:
Я пытаюсь понять, как vmsplice
это работает, особенно когда дело доходит до повторного использования буфера. В приведенном ниже примере я не передал флаг, поэтому обычно vmsplice
должен блокироваться, и ядро не «одарено» буфером. Однако, когда спящий режим закомментирован, вывод становится полностью неупорядоченным. Что я упускаю?
#define _GNU_SOURCE #include lt;bits/types/struct_iovec.hgt; #include lt;fcntl.hgt; #include lt;unistd.hgt; int main() { char buffer[2] = "0n"; struct iovec iov; iov.iov_base = buffer; iov.iov_len = 2; while (1) { buffer[0] = (buffer[0] - '0' 1) % 10 '0'; vmsplice(1,amp;iov,1,0); // When the sleep is commented, output becomes unordered. sleep(1); } }
запустите код как:
gcc example.c ./a.out | cat #The pipe is mandatory for vmsplice