Aller au contenu

C/Mpandrindra milina

Avy amin'i Wikibooks
< C

Torolàlana C ho an'ny Systems Programming amin'ny Linux

[hanova]

Ny C dia iray amin'ireo fiteny fandaharana fototra ampiasaina amin'ny fanoratana fandarahana ho an'ny mpandrindra milina amin'ny tontolo Linux. Ity pejy ity dia manome topi-maso fohy momba ireo foto-kevitra sy fitaovana lehibe ampiasaina amin'ny fanoratana fandarahana ho an'ny mpandrindra milina amin'ny Linux, amin'ny alalan'ny fiteny C.

Fanombohana

[hanova]
  • Loharano sy Fametrahana

Ny loharano fototra ampiasaina amin'ny fandaharana C amin'ny Linux dia ny fanambarana #include izay mampiditra ireo tahiry fototra.

#include <stdio.h>   // Ho an'ny fidirana/sotroana
#include <stdlib.h>  // Ho an'ny fitantanana loharanon-karena
#include <unistd.h>  // Ho an'ny fandidiana amin'ny rafitra
#include <fcntl.h>   // Ho an'ny fisie sy fahazoan-dàlana
#include <sys/types.h> // Ho an'ny karazana data sy fomba
#include <sys/stat.h>  // Ho an'ny fanondroana sata fisie

Fandraisana sy Fitantanana Fisie

[hanova]
  • Famoronana, Fampidirana, ary Fikirakirana Fisie

Amin'ny C, azonao atao ny mamorona, mampiditra, ary mandrindrina fisie amin'ny alalan'ny fitaovana fandidiana toy ny open, read, write, ary close.

int fd = open("ohatra.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) {
    perror("Tsy afaka nanokatra fisie");
    return 1;
}

char data[100];
ssize_t n = read(fd, data, sizeof(data));
if (n == -1) {
    perror("Tsy afaka namaky fisie");
    return 1;
}

n = write(fd, "Fandaharana amin'ny C", 21);
if (n == -1) {
    perror("Tsy afaka nanoratra fisie");
    return 1;
}

close(fd);
  • Fijerena Sata Fisie

Amin'ny alalan'ny fomba stat, azonao atao ny mijery ny sata sy ny toetra fisie iray.

struct stat sb;
if (stat("ohatra.txt", &sb) == -1) {
    perror("Tsy afaka mijery sata fisie");
    return 1;
}

printf("Karazana fisie: %d\\n", sb.st_mode);
printf("Habe: %lld bytes\\n", (long long) sb.st_size);

Fitantanana Loharanon-karena sy Processes

[hanova]
  • Famoronana Process (Forking)

Ny fomba fork() dia ampiasaina amin'ny famoronana process vaovao avy amin'ny process efa misy. Ny process vaovao dia antsoina hoe "zandry" (child process), ary ny process tany am-boalohany dia antsoina hoe "ray" (parent process).

pid_t pid = fork();
if (pid == -1) {
    perror("Tsy afaka nanomboka process vaovao");
    return 1;
} else if (pid == 0) {
    printf("Io no zandry process. PID: %d\\n", getpid());
} else {
    printf("Io no ray process. PID: %d\\n", getpid());
}
  • Miandry Process

Azonao atao ny miandry ny process iray hifarana amin'ny alalan'ny fomba wait() na waitpid().

int status;
pid_t child_pid = wait(&status);
if (child_pid == -1) {
    perror("Tsy afaka niandry process");
    return 1;
}

if (WIFEXITED(status)) {
    printf("Zandry process tapitra tamin'ny code %d\\n", WEXITSTATUS(status));
}
  • Fikirakirana Signaux

Ny signal dia fanitsiana an'ireo process mba hifanakalo hafatra na hihetsika rehefa misy tranga iray. Azonao atao ny misambotra signal amin'ny alalan'ny signal().

#include <signal.h>

void signal_handler(int signal) {
    printf("Nahazo signal: %d\\n", signal);
}

int main() {
    signal(SIGINT, signal_handler);

    while (1) {
        printf("Miandry signal...\\n");
        sleep(1);
    }

    return 0;
}

Fitantanana Loharanon-karena ao amin'ny Memoire

[hanova]
  • Fampiasana Memoire Voatokana

Azonao atao ny manokana toerana ao amin'ny memoire amin'ny alalan'ny malloc() na calloc(), ary mamafa izany amin'ny alalan'ny free() rehefa tsy ilaina intsony.

int *data = (int *)malloc(5 * sizeof(int));
if (data == NULL) {
    perror("Tsy ampy ny memoire");
    return 1;
}

for (int i = 0; i < 5; i++) {
    data[i] = i + 1;
}

for (int i = 0; i < 5; i++) {
    printf("%d ", data[i]);
}
printf("\\n");

free(data);

Fidirana amin'ny Rafitra Ny Linux

[hanova]
  • Fanatanterahana Baiko avy amin'ny Rafitra

Azonao atao ny manatanteraka baiko avy amin'ny rafitra amin'ny alalan'ny system().

system("ls -l");
  • Fidirana amin'ny Tontolon'ny Rafitra

Ny tontolon'ny rafitra dia azo jerena amin'ny alalan'ny getenv() sy setenv().

char *path = getenv("PATH");
if (path != NULL) {
    printf("PATH: %s\\n", path);
}

setenv("MYVAR", "Sarobidy", 1);

Torolàlana C ho an'ny Systems Programming amin'ny Windows

[hanova]

Ny C dia iray amin'ireo fiteny fandaharana fototra ampiasaina amin'ny systems programming amin'ny tontolo Windows. Ity cheatsheet ity dia manome topi-maso fohy momba ireo foto-kevitra sy fitaovana lehibe ampiasaina amin'ny systems programming amin'ny Windows, amin'ny alalan'ny fiteny C.

Fanombohana

[hanova]
  • Loharano sy Fametrahana

Ny loharano fototra ampiasaina amin'ny fandaharana C amin'ny Windows dia ny fanambarana #include izay mampiditra ireo tahiry fototra.

#include <windows.h>  // Ho an'ny API Windows
#include <stdio.h>     // Ho an'ny fidirana/sotroana
#include <stdlib.h>    // Ho an'ny fitantanana loharanon-karena

Fandraisana sy Fitantanana Fisie

[hanova]
  • Famoronana, Fampidirana, ary Fikirakirana Fisie

Amin'ny C amin'ny Windows, azonao atao ny mamorona, mampiditra, ary mandrindrina fisie amin'ny alalan'ny API Windows toy ny CreateFile, ReadFile, WriteFile, ary CloseHandle.

HANDLE hFile = CreateFile("ohatra.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
    printf("Tsy afaka nanokatra fisie. Error: %d\\n", GetLastError());
    return 1;
}

char data[100];
DWORD dwRead;
BOOL bSuccess = ReadFile(hFile, data, sizeof(data), &dwRead, NULL);
if (!bSuccess) {
    printf("Tsy afaka namaky fisie. Error: %d\\n", GetLastError());
    CloseHandle(hFile);
    return 1;
}

DWORD dwWritten;
bSuccess = WriteFile(hFile, "Fandaharana amin'ny C", 21, &dwWritten, NULL);
if (!bSuccess) {
    printf("Tsy afaka nanoratra fisie. Error: %d\\n", GetLastError());
    CloseHandle(hFile);
    return 1;
}

CloseHandle(hFile);

Fitantanana Loharanon-karena sy Processes

[hanova]
  • Famoronana Process (CreateProcess)

Amin'ny Windows, ny fomba CreateProcess dia ampiasaina amin'ny famoronana process vaovao avy amin'ny process efa misy.

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if (!CreateProcess(NULL, "C:\\Windows\\System32\\notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
    printf("Tsy afaka nanomboka process vaovao. Error: %d\\n", GetLastError());
    return 1;
}

WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
  • Miandry Process

Azonao atao ny miandry ny process iray hifarana amin'ny alalan'ny WaitForSingleObject.

WaitForSingleObject(pi.hProcess, INFINITE);
  • Fikirakirana Signaux (Events)

Ny events dia fitaovana ampiasaina amin'ny Windows mba hifanakalo hafatra eo amin'ny processes na threads. Azonao atao ny mamorona sy misambotra events amin'ny alalan'ny CreateEvent sy WaitForSingleObject.

HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, "MyEvent");
if (hEvent == NULL) {
    printf("Tsy afaka namorona event. Error: %d\\n", GetLastError());
    return 1;
}

// Miandry ny event
WaitForSingleObject(hEvent, INFINITE);

// Famotsorana ny event
SetEvent(hEvent);

CloseHandle(hEvent);

Fitantanana Loharanon-karena ao amin'ny Memoire

[hanova]
  • Fampiasana Memoire Voatokana

Azonao atao ny manokana toerana ao amin'ny memoire amin'ny alalan'ny HeapAlloc() ary mamafa izany amin'ny alalan'ny HeapFree() rehefa tsy ilaina intsony.

HANDLE hHeap = GetProcessHeap();
int *data = (int *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 5 * sizeof(int));
if (data == NULL) {
    printf("Tsy ampy ny memoire. Error: %d\\n", GetLastError());
    return 1;
}

for (int i = 0; i < 5; i++) {
    data[i] = i + 1;
}

for (int i = 0; i < 5; i++) {
    printf("%d ", data[i]);
}
printf("\\n");

HeapFree(hHeap, 0, data);

Fidirana amin'ny Tontolon'ny Windows

[hanova]
  • Fanatanterahana Baiko avy amin'ny Rafitra

Azonao atao ny manatanteraka baiko avy amin'ny rafitra amin'ny alalan'ny system().

system("dir");
  • Fidirana amin'ny Tontolon'ny Rafitra

Ny tontolon'ny rafitra dia azo jerena amin'ny alalan'ny GetEnvironmentVariable sy SetEnvironmentVariable.

char path[100];
DWORD ret = GetEnvironmentVariable("PATH", path, 100);
if (ret > 0 && ret < 100) {
    printf("PATH: %s\\n", path);
}

SetEnvironmentVariable("MYVAR", "Sarobidy");


Fehiny

[hanova]

Ny C ho an'ny systems programming amin'ny Linux na Windows dia manome fahafahana mitantana ny loharanon-karena, mifanakalo hafatra amin'ny rafitra, ary mifehy ny fitantanana angona amin'ny ambaratonga ambany. Amin'ny alalan'ny fahatakarana ireo foto-kevitra sy fitaovana fototra ireo, dia afaka manamboatra rindrambaiko mahery vaika sy mahomby ianao amin'ny tontolon'ny Linux sy Windows.