<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fi">
	<id>https://www.linux.fi/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NasmHerra</id>
	<title>Linux.fi - Käyttäjän muokkaukset [fi]</title>
	<link rel="self" type="application/atom+xml" href="https://www.linux.fi/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NasmHerra"/>
	<link rel="alternate" type="text/html" href="https://www.linux.fi/wiki/Toiminnot:Muokkaukset/NasmHerra"/>
	<updated>2026-04-13T07:01:54Z</updated>
	<subtitle>Käyttäjän muokkaukset</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Read()&amp;diff=57529</id>
		<title>Read()</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Read()&amp;diff=57529"/>
		<updated>2022-05-14T21:36:19Z</updated>

		<summary type="html">&lt;p&gt;NasmHerra: Ak: Uusi sivu: &amp;#039;&amp;#039;&amp;#039;Read()&amp;#039;&amp;#039;&amp;#039; on C-standardikirjaston tarjoama funktio, jolla voi lukea tietyn määrän dataa tiedostosta. Funktio kutsuu samannimisen järjestelmäkutsun. Kaikki korkeamma...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Read()&#039;&#039;&#039; on [[C-standardikirjasto]]n tarjoama funktio, jolla voi lukea tietyn määrän dataa tiedostosta. Funktio kutsuu samannimisen [[järjestelmäkutsu]]n. Kaikki korkeamman tason input-funktiot, kuten [[fgets()]], käyttää Read-funktiota. Read-funtkio on määritelty seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ssize_t read(int fd, void *buf, size_t count);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Turvallisuus==&lt;br /&gt;
Read-funktio on huomattavasti turvallisempi kuin esimerkiksi [[scanf()]] tai [[gets()]], koska se lukee vain tietyn määrän dataa. Siten ohjelmoija pystyy estämään [[ylivuoto|ylivuodot]].&lt;br /&gt;
&lt;br /&gt;
==Esimerkki==&lt;br /&gt;
Seuraava ohjelma lukee tiedoston /root/example.txt sisällön ilman virheenhallintaa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;malloc.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
    const char filename[] = &amp;quot;/root/example.txt&amp;quot;;&lt;br /&gt;
    off_t filesize;&lt;br /&gt;
    off_t oldoffset;&lt;br /&gt;
    int fd;&lt;br /&gt;
    unsigned char *buf;&lt;br /&gt;
&lt;br /&gt;
    fd = open(filename, O_RDONLY);&lt;br /&gt;
    oldoffset = lseek(fd, 0, SEEK_CUR);&lt;br /&gt;
    filesize = lseek(fd, 0, SEEK_END);&lt;br /&gt;
    lseek(fd, oldoffset, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
    buf = malloc(filesize);&lt;br /&gt;
    read(fd, buf, filesize);&lt;br /&gt;
    free(buf);&lt;br /&gt;
    close(fd);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Luokka:C-standardikirjasto]]&lt;/div&gt;</summary>
		<author><name>NasmHerra</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Keskustelu_k%C3%A4ytt%C3%A4j%C3%A4st%C3%A4:NasmHerra&amp;diff=57530</id>
		<title>Keskustelu käyttäjästä:NasmHerra</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Keskustelu_k%C3%A4ytt%C3%A4j%C3%A4st%C3%A4:NasmHerra&amp;diff=57530"/>
		<updated>2022-05-14T19:50:16Z</updated>

		<summary type="html">&lt;p&gt;NasmHerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[Syscall()]]==&lt;br /&gt;
Tervetuloa Linux-wikiin, kiitos myös luomastasi uudesta artikkelista, vinkkinä jatkossa, etenkin uutta luodessa, jos mahdollista, kannattaa uuteen artikkeliin viittaava linkki lisätä, joko johonkin olemassaolevaan asiaan viittaavaan artikkeliin, mallineeseen tai lisätä ainakin tämä uusi artikkeli, johonkin luokkaan, jos toiseenkin tai luoda sellainen mikäli sopivaa ei ole olemassa. &lt;br /&gt;
&lt;br /&gt;
Tämä sen takia ettei uutukaisartikkeli jää [[Toiminnot:Yksinäiset_sivut|yksinäiseksi artikkeliksi]], johon mikään ei viittaa ja siten todennäköisesti sitä ei kukaan myöskään tule lukemaan. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 12. toukokuuta 2022 kello 18.15 (EEST)&lt;br /&gt;
&lt;br /&gt;
:Kiitos tiedosta, jatkossa toimin ohjeidesi mukaan. [[Käyttäjä:NasmHerra|NasmHerra]] ([[Keskustelu käyttäjästä:NasmHerra|keskustelu]])&lt;/div&gt;</summary>
		<author><name>NasmHerra</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Syscall()&amp;diff=57523</id>
		<title>Syscall()</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Syscall()&amp;diff=57523"/>
		<updated>2022-05-10T16:17:52Z</updated>

		<summary type="html">&lt;p&gt;NasmHerra: Ensimmäinen artikkelini - virheet todennäköisiä&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Syscall&#039;&#039;&#039; on [[C-standardikirjasto]]n tarjoama funktio, jolla pystyy kutsumaan [[järjestelmäkutsu]]n. Funktio löytyy [[unistd.h]]-otsaketiedostosta. Syscall-funktio on määritelty seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
long syscall(long number, ...);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Määritelmän mukaan syscall-funktio vaatii vähintään yhden argumentin eli kutsuttavan järjestelmäkutsun numeron sekä järjestelmäkutsusta riippuen mahdollisesti tietyn määrän tietyn tyyppisiä argumentteja.&lt;br /&gt;
Järjestelmäkutsun kutsumisen lisäksi funktio asettaa tarvittaessa [[errno]]-muuttujan tietyn arvon.&lt;br /&gt;
&lt;br /&gt;
== Funktion luominen ==&lt;br /&gt;
Mikäli haluat tehdä oman [[C-kirjasto]]n, voit luoda oman syscall-funktion. Mikäli oletetaan, että saatavilla on vain kolme järjestelmäkutsua: &#039;&#039;open&#039;&#039; (0) , &#039;&#039;read&#039;&#039; (1) ja &#039;&#039;write&#039;&#039; (2), voidaan funktio yksinkertaisimmillaan ohjelmoida [[NASM]]-kielellä näin:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
[BITS 64]&lt;br /&gt;
&lt;br /&gt;
global syscall&lt;br /&gt;
extern ENOSYS&lt;br /&gt;
extern ERRNO&lt;br /&gt;
&lt;br /&gt;
section .text&lt;br /&gt;
&lt;br /&gt;
syscall:&lt;br /&gt;
    cmp rax, NSYSCALLS&lt;br /&gt;
    ja nosyscall&lt;br /&gt;
    syscall&lt;br /&gt;
    cmp rax, 0&lt;br /&gt;
    push rax&lt;br /&gt;
    push rcx&lt;br /&gt;
    jb set_errno&lt;br /&gt;
    pop rcx&lt;br /&gt;
    pop rax&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
nosyscall:&lt;br /&gt;
    mov rax, ENOSYS&lt;br /&gt;
&lt;br /&gt;
set_errno:&lt;br /&gt;
    mov rcx, rax&lt;br /&gt;
    sub rax, rcx&lt;br /&gt;
    sub rax, rcx&lt;br /&gt;
    mov errno, rax&lt;br /&gt;
&lt;br /&gt;
section .data&lt;br /&gt;
&lt;br /&gt;
NSYSCALLS: resb 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>NasmHerra</name></author>
	</entry>
</feed>