所有的例子使用如下命令进行编译:
gcc -Wall xxx.c -o xxxx
这个例子演示malloc/free分配和释放私有内存的使用方法
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
char* mem = (char*)malloc(8192); // system call
if(NULL != mem)
{
mem[0] = mem[1] = 'A'; mem[2] = 0x00;
printf("mem is [%s]\n", mem);
free(mem);
}
return 0;
}
这个例子演示fork()的使用
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t pid;
// Create a new process
pid = fork();
if (pid < 0)
{
// Error occurred
perror("Fork failed");
return 1;
} else if (pid == 0)
{
// Child process
printf("Child Process: PID = %d, Parent PID = %d\n", getpid(), getppid());
} else
{
// Parent process
printf("Parent Process: PID = %d, Child PID = %d\n", getpid(), pid);
}
return 0;
}
私有内存的演示:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MEMORY_SIZE 8192
char* gmem = NULL;
int main(int argc, char* argv[])
{
pid_t pid;
int result = 0;
gmem = (char*)malloc(MEMORY_SIZE);
if(NULL == gmem) { result = 1; goto myquit; }
gmem[0] = gmem[1] = 'A'; gmem[2] = 0x00;
pid = fork();
if(pid < 0) { result = 1; goto myquit; }
if(0 == pid)
{
printf("(Child): I will sleep for a while.\n");
sleep(10); /* sleep for 10 seconds */
printf("(Child): gmem is [%s]\n", gmem);
goto myquit;
} else
{
gmem[0] = gmem[1] = 'B'; gmem[2] = 0x00;
sleep(20); /* sleep for 20 seconds */
printf("(Parent): gmem is [%s]\n", gmem);
}
myquit:
if(NULL != gmem) free(gmem);
return result;
}
d
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#endif
#ifndef MAP_HASSEMAPHORE
#define MAP_HASSEMAPHORE 0
#endif
#define PG_MMAP_FLAGS (MAP_SHARED|MAP_ANONYMOUS|MAP_HASSEMAPHORE)
#define MEMORY_SIZE 8192
void* gmem = MAP_FAILED;
int main(int argc, char* argv[])
{
pid_t pid;
int result = 0;
char *p;
gmem=mmap(NULL,MEMORY_SIZE,PROT_READ|PROT_WRITE,PG_MMAP_FLAGS,-1,0);
if(MAP_FAILED == gmem) { result = 1; goto myquit; }
p = (char*)gmem; p[0] = p[1] = 'A'; p[2] = 0x00;
pid = fork(); /* <---The key point!!! */
if(pid < 0) { result = 1; goto myquit; }
if(0 == pid)
{ /* fork succeeded, in child process */
sleep(10);
p = (char*)gmem; p[0] = p[1] = 'B'; p[2] = 0x00;
exit(0);
} else
{ /* fork succeeded, in parent process */
printf("(Parent) - before sleep: [%s]\n", p);
sleep(20);
printf("(Parent) - after sleep: [%s]\n", p);
}
myquit:
if(MAP_FAILED != gmem) munmap(gmem, MEMORY_SIZE);
return result;
}
write/read
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
char data_buf[16] = {0};
int main(int argc, char* argv[])
{
int fd = open("data.bin", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1)
{
printf("Cannot open file\n");
return 1;
}
for(int i=0; i<16; i++) data_buf[i]=i+1;
ssize_t bytes_written = write(fd, data_buf, 16);
if (bytes_written == -1)
{
printf("Cannot write to file\n");
close(fd);
return 2;
}
close(fd);
return 0;
}
最新回复 (0)