实用的Linux C编程实例分享

实用的Linux C编程实例分享

1. 文件操作

1.1. 文件读取

在Linux C编程中,文件读取是一个常见的操作。通过使用系统调用函数open,我们可以打开一个文件,并指定文件的读写方式。

以下是一个简单的文件读取示例:

#include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

int main() {

int fd = open("file.txt", O_RDONLY); // 打开文件

if (fd == -1) {

perror("open");

return -1;

}

char buffer[1024];

ssize_t bytes_read;

while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0)

{

write(STDOUT_FILENO, buffer, bytes_read);

}

close(fd); // 关闭文件

return 0;

}

在上述代码中,我们使用open函数打开文件名为file.txt的文件,并指定以只读方式打开。如果文件打开成功,返回文件描述符,否则返回-1。

接下来,我们使用read函数从文件中读取数据,并将其写入标准输出。

最后,我们使用close函数关闭文件。

通过这个示例,我们可以方便地理解Linux C中的文件读取操作,以及相关的系统调用函数的使用。

1.2. 文件写入

文件写入是Linux C编程中的另一个常见操作。通过使用open系统调用函数打开文件,并指定文件的写入方式,我们可以将数据写入文件。

以下是一个简单的文件写入示例:

#include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

int main() {

int fd = open("file.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644); // 打开文件

if (fd == -1) {

perror("open");

return -1;

}

char buffer[] = "Hello, World!";

ssize_t bytes_written = write(fd, buffer, sizeof(buffer)); // 写入数据

close(fd); // 关闭文件

return 0;

}

在上述代码中,我们使用open函数打开文件名为file.txt的文件,并指定可写、若不存在则创建和截断(清空文件)的方式。如果文件打开成功,返回文件描述符,否则返回-1。

接下来,我们使用write函数将buffer中的数据写入文件。write函数返回实际写入的字节数。

最后,我们使用close函数关闭文件。

通过这个示例,我们可以方便地理解Linux C中的文件写入操作,以及相关的系统调用函数的使用。

2. 进程管理

2.1. 创建新进程

在Linux C编程中,创建新进程是一个常见的操作。通过使用fork系统调用函数,我们可以创建出一个新的进程。

以下是一个简单的创建新进程的示例:

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main() {

pid_t pid = fork(); // 创建新进程

if (pid == -1) {

perror("fork");

return -1;

}

else if (pid == 0) {

printf("Child process\n"); // 子进程

}

else {

printf("Parent process\n"); // 父进程

}

return 0;

}

在上述代码中,我们使用fork函数创建一个新的进程。fork函数返回0表示当前进程为子进程,返回一个大于0的值表示当前进程为父进程,返回-1表示创建进程失败。

通过这个示例,我们可以方便地理解Linux C中创建新进程的操作,以及相关的系统调用函数的使用。

2.2. 进程等待

在Linux C编程中,进程等待是一个常见的操作。通过使用wait系统调用函数,我们可以使父进程等待子进程的终止。

以下是一个简单的进程等待示例:

#include <stdio.h>

#include <sys/types.h>

#include <sys/wait.h>

#include <unistd.h>

int main() {

pid_t pid = fork(); // 创建新进程

if (pid == -1) {

perror("fork");

return -1;

}

else if (pid == 0) {

printf("Child process\n"); // 子进程

sleep(2);

return 0;

}

else {

printf("Parent process\n"); // 父进程

wait(NULL); // 父进程等待子进程终止

printf("Child process terminated\n");

}

return 0;

}

在上述代码中,我们使用fork函数创建一个新的进程。父进程通过wait函数等待子进程的终止。

通过这个示例,我们可以方便地理解Linux C中进程等待的操作,以及相关的系统调用函数的使用。

3. 网络编程

3.1. 套接字编程

在Linux C编程中,套接字编程是进行网络通信的重要部分。通过使用socket系统调用函数,我们可以创建出一个套接字,并进行网络通信。

以下是一个简单的套接字编程示例:

#include <stdio.h>

#include <sys/socket.h>

#include <netinet/in.h>

int main() {

int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字

if (sockfd == -1) {

perror("socket");

return -1;

}

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(8080);

serv_addr.sin_addr.s_addr = INADDR_ANY;

// 将套接字与IP地址和端口绑定

int bind_result = bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

if (bind_result == -1) {

perror("bind");

return -1;

}

// 监听来自客户端的连接请求

int listen_result = listen(sockfd, 10);

if (listen_result == -1) {

perror("listen");

return -1;

}

printf("Server is listening on port 8080...\n");

return 0;

}

在上述代码中,我们使用socket函数创建一个套接字。AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议。

接下来,我们使用bind函数将套接字与指定的IP地址和端口绑定。

最后,我们使用listen函数监听来自客户端的连接请求。

通过这个示例,我们可以方便地理解Linux C中套接字编程的操作,以及相关的系统调用函数的使用。

3.2. 客户端连接

在Linux C编程中,客户端连接是进行网络通信的重要部分。通过使用connect系统调用函数,我们可以与服务器建立连接,并进行网络通信。

以下是一个简单的客户端连接示例:

#include <stdio.h>

#include <sys/socket.h>

#include <netinet/in.h>

int main() {

int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字

if (sockfd == -1) {

perror("socket");

return -1;

}

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(8080);

serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

// 与服务器建立连接

int connect_result = connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

if (connect_result == -1) {

perror("connect");

return -1;

}

printf("Connected to server\n");

return 0;

}

在上述代码中,我们使用socket函数创建一个套接字。AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议。

接下来,我们设置服务器的IP地址和端口,并使用connect函数与服务器建立连接。

通过这个示例,我们可以方便地理解Linux C中客户端连接的操作,以及相关的系统调用函数的使用。

总结

本文介绍了Linux C编程中的几个实用例子,包括文件操作、进程管理和网络编程。通过对这些例子的分析和代码演示,读者可以更加深入地理解Linux C编程,并掌握相关的技能。

通过文件操作,我们可以方便地进行文件读取和文件写入操作。通过进程管理,我们可以控制进程的创建和等待。通过网络编程,我们可以进行套接字编程和客户端连接操作。

希望本文对读者对Linux C编程有所帮助,进一步拓宽了对Linux C编程的理解和应用。

操作系统标签