Translation components API.

See the Weblate's Web API documentation for detailed description of the API.

GET /api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=17
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "count": 891,
    "next": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=18",
    "previous": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=16",
    "results": [
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26552/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:30:04.332217Z",
            "action": 5,
            "target": "Introducción a la sincronización",
            "id": 93242,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93242/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26553/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:31:09.729930Z",
            "action": 5,
            "target": "Los subprocesos necesitan algún tipo de sincronización y <trademark class=\"registered\">POSIX</trademark> proporciona algunos de ellos: mutex para exclusión mutua, bloqueos de lectura y escritura para exclusión mutua con una proporción sesgada de lecturas y escrituras y variables de condición para señalar un cambio de estado. Es interesante notar que<trademark class=\"registered\">POSIX</trademark> La API de subprocesos carece de soporte para semáforos. Esas implementaciones de rutinas de sincronización dependen en gran medida del tipo de soporte de subprocesos que tenemos. En el modelo puro 1: M (espacio de usuario), la implementación se puede realizar únicamente en el espacio de usuario y, por lo tanto, es muy rápida (las variables de condición probablemente terminarán implementándose mediante señales, es decir, no rápido) y simple. En el modelo 1: 1, la situación también es bastante clara: los subprocesos deben sincronizarse utilizando las instalaciones del kernel (lo cual es muy lento porque se debe realizar una llamada al sistema). El escenario mixto M: N simplemente combina el primer y segundo enfoque o se basa únicamente en el kernel. La sincronización de subprocesos es una parte vital de la programación habilitada para subprocesos y su rendimiento puede afectar mucho al programa resultante. Pruebas de rendimiento recientes en el sistema operativo FreeBSD mostraron que una implementación mejorada de sx_lock produjo un 40% de aceleración en <firstterm>ZFS</firstterm> (un usuario pesado de sx), esto es algo dentro del kernel pero muestra claramente cuán importante es el rendimiento de las primitivas de sincronización.",
            "id": 93243,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93243/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26555/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:31:29.200303Z",
            "action": 5,
            "target": "Introducción a los futexes",
            "id": 93245,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93245/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26556/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:31:53.994097Z",
            "action": 5,
            "target": "<trademark class=\"registered\">Linux</trademark> implementa subprocesos 1: 1, es decir, tiene que usar primitivas de sincronización en el kernel. Como se indicó anteriormente, los programas con subprocesos bien escritos tienen poca contención de bloqueo. Entonces, una secuencia típica podría realizarse como dos contadores de referencia mutex de aumento/disminución atómicos, que es muy rápido, como se presenta en el siguiente ejemplo:",
            "id": 93246,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93246/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26558/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:32:03.033465Z",
            "action": 5,
            "target": "El subproceso 1: 1 nos obliga a realizar dos llamadas al sistema para esas llamadas mutex, lo cual es muy lento.",
            "id": 93247,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93247/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157266/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:32:32.975829Z",
            "action": 5,
            "target": "La solución <trademark class=\"registered\">Linux</trademark> 2.6 implementos se llama futexes. Los futexes implementan la verificación de contención en el espacio de usuario y llaman a las primitivas del núcleo solo en caso de contención. Por tanto, el caso típico tiene lugar sin ninguna intervención del núcleo. Esto produce una implementación de primitivas de sincronización razonablemente rápida y flexible.",
            "id": 93248,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93248/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26561/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:32:48.526173Z",
            "action": 5,
            "target": "La llamada al sistema futex se ve así:",
            "id": 93249,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93249/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26562/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:32:51.628025Z",
            "action": 37,
            "target": "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);",
            "id": 93250,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93250/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26563/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:19.454040Z",
            "action": 5,
            "target": "En este ejemplo <varname>uaddr</varname>es una dirección del mutex en el espacio de usuario, <varname>op</varname> es una operación que estamos a punto de realizar y los demás parámetros tienen un significado por operación.",
            "id": 93251,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93251/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26564/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:28.259580Z",
            "action": 5,
            "target": "Los Futexes implementan las siguientes operaciones:",
            "id": 93252,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93252/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26565/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:30.779156Z",
            "action": 37,
            "target": "<literal>FUTEX_WAIT</literal>",
            "id": 93253,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93253/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26566/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:33.455255Z",
            "action": 37,
            "target": "<literal>FUTEX_WAKE</literal>",
            "id": 93254,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93254/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26567/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:36.496755Z",
            "action": 37,
            "target": "<literal>FUTEX_FD</literal>",
            "id": 93255,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93255/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26568/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:39.232006Z",
            "action": 37,
            "target": "<literal>FUTEX_REQUEUE</literal>",
            "id": 93256,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93256/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26569/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:41.652893Z",
            "action": 37,
            "target": "<literal>FUTEX_CMP_REQUEUE</literal>",
            "id": 93257,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93257/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26570/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:44.555913Z",
            "action": 37,
            "target": "<literal>FUTEX_WAKE_OP</literal>",
            "id": 93258,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93258/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26571/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:33:47.576012Z",
            "action": 37,
            "target": "FUTEX_WAIT",
            "id": 93259,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93259/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26572/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:34:37.593572Z",
            "action": 5,
            "target": "Esta operación verifica que en la dirección <varname>uaddr</varname> el valor <varname>val</varname> está escrito. Si no, <literal>EWOULDBLOCK</literal> se devuelve, de lo contrario, el hilo se pone en cola en el futex y se suspende. Si el argumento <varname>timeout</varname> es distinto de cero, especifica el tiempo máximo para dormir; de lo contrario, el sueño es infinito.",
            "id": 93260,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93260/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26574/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:35:11.786897Z",
            "action": 5,
            "target": "Esta operación toma un futex en <varname>uaddr</varname> y se despierta <varname>val</varname> Primeros futexes en cola en este futex.",
            "id": 93261,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93261/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26576/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:35:19.530391Z",
            "action": 5,
            "target": "Esta operación asocia un descriptor de archivo con un futex dado.",
            "id": 93262,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93262/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26577/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:35:23.144704Z",
            "action": 37,
            "target": "FUTEX_REQUEUE",
            "id": 93263,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93263/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26578/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:36:07.473683Z",
            "action": 5,
            "target": "Esta operación toma <varname>val</varname> hilos en cola en futex en <varname>uaddr</varname>, Los despierta y toma<varname>val2</varname> siguientes hilos y los coloca en futex en <varname>uaddr2</varname>.",
            "id": 93264,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93264/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26579/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:36:10.695260Z",
            "action": 37,
            "target": "FUTEX_CMP_REQUEUE",
            "id": 93265,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93265/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26580/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:36:41.401015Z",
            "action": 5,
            "target": "Esta operación hace lo mismo que <literal>FUTEX_REQUEUE</literal>pero comprueba que <varname>val3</varname> igual a <varname>val</varname> primero.",
            "id": 93266,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93266/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26581/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:36:44.231685Z",
            "action": 37,
            "target": "FUTEX_WAKE_OP",
            "id": 93267,
            "action_name": "标记为需要编辑",
            "url": "https://translate-dev.freebsd.org/api/changes/93267/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26582/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:37:55.161559Z",
            "action": 5,
            "target": "Esta operación realiza una operación atómica en <varname>val3</varname> (que contiene algún otro valor codificado) y<varname>uaddr</varname>. Entonces se despierta <varname>val</varname> hilos en futex en <varname>uaddr</varname> y si la operación atómica devolvió un número positivo, se despierta <varname>val2</varname> hilos en futex en<varname>uaddr2</varname>.",
            "id": 93268,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93268/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26583/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:38:08.739317Z",
            "action": 5,
            "target": "Las operaciones implementadas en <literal>FUTEX_WAKE_OP</literal>:",
            "id": 93269,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93269/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26589/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:38:54.161642Z",
            "action": 5,
            "target": "No hay <varname>val2</varname> parámetro en el prototipo futex. los <varname>val2</varname> es tomado de la <varname>struct timespec *timeout</varname> parámetro para operaciones <literal>FUTEX_REQUEUE</literal>, <literal>FUTEX_CMP_REQUEUE</literal> y <literal>FUTEX_WAKE_OP</literal>.",
            "id": 93270,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93270/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26590/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:39:04.021285Z",
            "action": 5,
            "target": "Emulación Futex en FreeBSD",
            "id": 93271,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93271/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26591/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:39:41.649911Z",
            "action": 5,
            "target": "La emulación futex en FreeBSD se toma de NetBSD y nosotros la ampliamos. Se coloca en  <filename>linux_futex.c</filename> and <filename>linux_futex.h</filename> archivos. la <literal>futex</literal> estructura se parece a:",
            "id": 93272,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93272/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26591/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:39:44.976106Z",
            "action": 2,
            "target": "La emulación futex en FreeBSD se toma de NetBSD y nosotros la ampliamos. Se coloca en <filename>linux_futex.c</filename> and <filename>linux_futex.h</filename> archivos. la <literal>futex</literal> estructura se parece a:",
            "id": 93273,
            "action_name": "修改了译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93273/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26593/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:40:03.933785Z",
            "action": 5,
            "target": "Y la estructura  <literal>waiting_proc</literal> es:",
            "id": 93274,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93274/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26593/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:40:07.508986Z",
            "action": 2,
            "target": "Y la estructura <literal>waiting_proc</literal> es:",
            "id": 93275,
            "action_name": "修改了译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93275/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26596/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:40:41.467112Z",
            "action": 5,
            "target": "Un futex se obtiene utilizando el <function>futex_get</function>función, que busca en una lista lineal de futexes y devuelve el encontrado o crea un nuevo futex. Al liberar un futex del uso, lo llamamos <function>futex_put</function> función, que disminuye un contador de referencia del futex y si el refcount llega a cero se libera.",
            "id": 93276,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93276/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26598/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:42:08.869770Z",
            "action": 5,
            "target": "Cuando un futex pone en cola un hilo para dormir, crea un <literal>working_proc</literal> estructura y coloca esta estructura en la lista dentro de la estructura futex, entonces solo realiza una <citerefentry><refentrytitle>tsleep</refentrytitle><manvolnum>9</manvolnum></citerefentry> suspender el hilo. El tiempo de sueño se puede agotar. Después <citerefentry><refentrytitle>tsleep</refentrytitle><manvolnum>9</manvolnum></citerefentry> devuelve (el hilo se despertó o se agotó el tiempo de espera) el <literal>working_proc</literal> La estructura se elimina de la lista y se destruye. Todo esto se hace en el <function>futex_sleep</function>función. Si nos despertaran de <function>futex_wake</function> Nosotros tenemos <varname>wp_new_futex</varname> establecido para que podamos dormir en él. De esta manera, la puesta en cola real se realiza en esta función..",
            "id": 93277,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93277/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26600/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:42:49.308582Z",
            "action": 5,
            "target": "Despertar un hilo durmiendo en un futex se realiza en el <function>futex_wake</function> función. Primero en esta función imitamos el extraño <trademark class=\"registered\">Linux</trademark> comportamiento, donde despierta N subprocesos para todas las operaciones, la única excepción es que las operaciones REQUEUE se realizan en N + 1 subprocesos. Pero esto generalmente no hace ninguna diferencia ya que estamos despertando todos los hilos. A continuación, en la función en el bucle, activamos n subprocesos, después de esto, verificamos si hay un nuevo futex para poner en cola. Si es así, ponemos en cola hasta n2 subprocesos en el nuevo futex. Esto coopera con <function>futex_sleep</function>.",
            "id": 93278,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93278/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26602/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:45:25.953170Z",
            "action": 5,
            "target": "La <literal>FUTEX_WAKE_OP</literal> El funcionamiento es bastante complicado. Primero obtenemos dos futexes en direcciones<varname>uaddr</varname> and <varname>uaddr2</varname> luego realizamos la operación atómica usando <varname>val3</varname> and <varname>uaddr2</varname>. Then <varname>val</varname> los camareros en el primer futex se despiertan y si la condición de operación atómica se mantiene, nos despertamos <varname>val2</varname> (es decir. <varname>timeout</varname>) camarero en el segundo futex.",
            "id": 93279,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93279/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26603/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:45:36.481650Z",
            "action": 5,
            "target": "operación atómica futex",
            "id": 93280,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93280/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26604/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:45:59.765278Z",
            "action": 5,
            "target": "La operación atómica toma dos parámetros <varname>encoded_op</varname> y <varname>uaddr</varname>. La operación codificada codifica la operación en sí, comparando valor, argumento de operación y argumento de comparación. El pseudocódigo para la operación es como este:",
            "id": 93281,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93281/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26606/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:46:45.951212Z",
            "action": 5,
            "target": "Y esto se hace de forma atómica. Primero una copia del número en <varname>uaddr</varname> se realiza y se hace la operación. El código maneja fallas de página y si no ocurre ninguna falla de página <varname>oldval</varname> se compara con <varname>cmparg</varname> argumento con comparador cmp.",
            "id": 93282,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93282/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26607/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:46:56.192327Z",
            "action": 5,
            "target": "Bloqueo futex",
            "id": 93283,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93283/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26608/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:47:30.176837Z",
            "action": 5,
            "target": "La implementación de Futex utiliza dos listas de bloqueo que protegen<function>sx_lock</function> y cerraduras globales (ya sea gigante u otra <function>sx_lock</function>). Cada operación se realiza bloqueada desde el principio hasta el final.",
            "id": 93284,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93284/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26609/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:47:45.072700Z",
            "action": 5,
            "target": "Implementación de varias llamadas al sistema",
            "id": 93285,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93285/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26610/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:47:52.938718Z",
            "action": 5,
            "target": "En esta sección voy a describir algunas llamadas al sistema más pequeñas que vale la pena mencionar porque su implementación no es obvia o esas llamadas al sistema son interesantes desde otro punto de vista.",
            "id": 93286,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93286/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26611/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:48:08.850993Z",
            "action": 5,
            "target": "*en familia de llamadas al sistema",
            "id": 93287,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93287/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26612/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:49:59.683193Z",
            "action": 5,
            "target": "Durante el desarrollo de <trademark class=\"registered\">Linux</trademark>2.6.16 kernel, se agregaron las llamadas al sistema * at. Esas llamadas al sistema (<function>openat</function>por ejemplo) funcionan exactamente como sus contrapartes at-less con la ligera excepción de <varname>dirfd</varname> parámetro. Este parámetro cambia donde está el archivo dado, en el que se va a realizar la llamada al sistema. Cuando el <varname>filename</varname> el parámetro es absoluto <varname>dirfd</varname> se ignora pero cuando la ruta al archivo es relativa, se trata de la obra. los <varname>dirfd</varname> El parámetro es un directorio relativo al que se comprueba la ruta relativa. los <varname>dirfd</varname> parámetro es un descriptor de archivo de algún directorio o <literal>AT_FDCWD</literal>. Entonces, por ejemplo, el <function>openat</function> syscall puede ser así:",
            "id": 93288,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93288/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157268/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:51:21.773207Z",
            "action": 5,
            "target": "Esta infraestructura es necesaria para evitar carreras al abrir archivos fuera del directorio de trabajo. Imagine que un proceso consta de dos subprocesos, el subproceso A y el subproceso B. Problemas del subproceso A <literal>abrir(./tmp/foo/bah., flags, mode)</literal> y antes de regresar se reemplaza y se ejecuta el hilo B. El hilo B no se preocupa por las necesidades del hilo A y cambia el nombre o elimina<filename>/tmp/foo/</filename>. Tenemos una carrera. Para evitar esto podemos abrir <filename>/tmp/foo</filename> and use it as <varname>dirfd</varname>para <function>openat</function>syscall. Esto también permite al usuario implementar directorios de trabajo por subproceso.",
            "id": 93289,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93289/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26615/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:52:03.105021Z",
            "action": 5,
            "target": "<trademark class=\"registered\">Linux</trademark> familia de *at syscalls contiene: <function>linux_openat</function>, <function>linux_mkdirat</function>, <function>linux_mknodat</function>, <function>linux_fchownat</function>, <function>linux_futimesat</function>, <function>linux_fstatat64</function>, <function>linux_unlinkat</function>, <function>linux_renameat</function>, <function>linux_linkat</function>, <function>linux_symlinkat</function>, <function>linux_readlinkat</function>, <function>linux_fchmodat</function> and <function>linux_faccessat</function>. Todos estos se implementan utilizando el modificado <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> capa de envoltura rutinaria y simple.",
            "id": 93290,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93290/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26617/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:55:51.757115Z",
            "action": 5,
            "target": "La implementación se realiza alterando el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina (descrita arriba) para tomar un parámetro adicional <varname>dirfd</varname> en su <literal>nameidata</literal>estructura, que especifica el punto de inicio de la búsqueda de nombre de ruta en lugar de utilizar el directorio de trabajo actual cada vez. La resolución de <varname>dirfd</varname> desde el número de descriptor de archivo hasta un vnode se realiza en nativo *en syscalls. Cuando <varname>dirfd</varname> is <literal>AT_FDCWD</literal> el <varname>dvp</varname> entrada en <literal>nameidata</literal> la estructura es <literal>NULL</literal> pero cuando <varname>dirfd</varname> es un número diferente, obtenemos un archivo para este descriptor de archivo, verificamos si este archivo es válido y si hay un vnode adjunto, obtenemos un vnode. Luego verificamos que este vnode sea un directorio. En el actual <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina simplemente sustituimos el  <varname>dvp</varname> vnode para <varname>dp</varname> variable en el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> función, que determina el punto de partida. los <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> no se utiliza directamente, sino a través de un rastro de diferentes funciones en varios niveles. Por ejemplo el <function>openat</function> va así:",
            "id": 93291,
            "action_name": "新译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93291/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26617/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:55:57.269854Z",
            "action": 2,
            "target": "La implementación se realiza alterando el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina (descrita arriba) para tomar un parámetro adicional <varname>dirfd</varname> en su <literal>nameidata</literal>estructura, que especifica el punto de inicio de la búsqueda de nombre de ruta en lugar de utilizar el directorio de trabajo actual cada vez. La resolución de <varname>dirfd</varname> desde el número de descriptor de archivo hasta un vnode se realiza en nativo *en syscalls. Cuando <varname>dirfd</varname> is <literal>AT_FDCWD</literal> el <varname>dvp</varname> entrada en <literal>nameidata</literal> la estructura es <literal>NULL</literal> pero cuando <varname>dirfd</varname> es un número diferente, obtenemos un archivo para este descriptor de archivo, verificamos si este archivo es válido y si hay un vnode adjunto, obtenemos un vnode. Luego verificamos que este vnode sea un directorio. En el actual <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina simplemente sustituimos el <varname>dvp</varname> vnode para <varname>dp</varname> variable en el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> función, que determina el punto de partida. los <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> no se utiliza directamente, sino a través de un rastro de diferentes funciones en varios niveles. Por ejemplo el <function>openat</function> va así:",
            "id": 93292,
            "action_name": "修改了译文",
            "url": "https://translate-dev.freebsd.org/api/changes/93292/?format=api"
        }
    ]
}