C/Mpandrindra milina
Torolàlana C ho an'ny Systems Programming amin'ny Linux
hanovaNy 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
hanovaNy 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
hanovaNy 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.