C语言函数参数既做出参又做入参的代表

//使用fcntl对文件进行加锁

#include "stdio.h"
#include "unistd.h"
#include "fcntl.h"

int main()
{
    int fd;
    struct flock lk;
    int r;
    fd=open("a.txt", O_RDWR);
    if (fd==-1)
    {
        fd=open("a.txt", O_RDWR|O_CREAT|O_EXCL, 0666);
        if (fd==-1)
        {
            perror("File Open Error");
            exit(2);
        }
    }
    lk.l_type=F_WRLCK;
    lk.l_whence=SEEK_SET;
    lk.l_start=5;
    lk.l_len=10;
    r=fcntl(fd, F_SETLK, &lk);           //lk在这里是传入参数
    if (r==0)
    {
         printf("Lock Sussess!\n");
    }
    else
    {
        printf("Lock Failed!\n");
    }
    while (1);                         //不能让程序退出
    return 0;
}

//使用fcntl读取文件锁

#include "stdio.h"
#include "unistd.h"

#include "fcntl.h" 

 

int main()
{
    int fd;
    struct flock lk={0};
    int r;
    fd=open("a.txt", O_RDWR);
    if (fd==-1)
    {

        perror("Error");
        exit(0);
    }
    r=fcntl(fd, F_GETLK, &lk);     //lk在这里是传出参数
    if (r==0)
    {
        printf("Get Lock Success!\n");
    }
    if (lk.l_type==F_WRLCK)
    {
        printf("Write Lock!\n");
    }
    printf("start:%d, len:%d\n", lk.l_start, lk.l_len);
    return 0;
}

时间: 2024-11-09 00:48:01

C语言函数参数既做出参又做入参的代表的相关文章

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部参数名两种本文选自swift入门很简单. 7.4.1  本地参数名 本地参数名就是定义函数名时,在参数列表中所写的参数名,它只可以在函数主体内使用.如以下的一个代码片段,它定义了一个函数名为fun的函数,在此函数的参数列表中定义的就是本地参数名文选自swift入门很简单. func fun(star

C语言函数参数压栈顺序为何是从右到左?(从左向右的话,碰到printf的会陷入死循环)

上学期学习了汇编语言,并在操作系统实验中使用了汇编+C语言混合编程,中间也了解了一些C语言与汇编语言的对应关系. 由于汇编语言是底层的编程语言,各种函数参数都要直接控制栈进行存取,在混合编程中,要用汇编来调用C函数,当然就要知道参数的压栈情况了. 当知道C函数的参数压栈顺序是从右到左时,我觉得很奇怪,因为大多数情况下,人们的习惯是从左到右的,难不成设计者学咱们中国古代写字从右到左的习惯不成? 当时只是记下了这个规则而已,并没有去探究这其中的缘由,后来在实验中自己用汇编实现了printf和scan

C语言函数参数为空和void

C语言中函数参数的为空和用void标注他们的效果一样吗? #include <stdio.h>  2 //int add();  3 int add(void);  4 int main(void)  5 {  6     int i;  7     i = add(5 ,6);  8   9     printf("%d\n", i); 10     return 0; 11 } 12 int add(a ,b) 13 { 14     return a + b ; 15

C语言函数参数传递方式

C语言中函数的参数传递方式有两种:传值.传地址. 1.传值调用 在被调用函数中开辟出一个临时的内存空间,在主调用函数进入被调用函数前,会将实参进行拷贝,拷贝的数据放在该临时内存空间中,供被调用函数使用.当被调用函数返回时,该临时内存空间即被释放. 1 #include<stdio.h> 2 3 int test_func(char *q) 4 { 5 long lAddr=&q; // 被调用时,光标选中“&q”,显示结果(随机)为:0x002df7ac {0x013058b8

C 语言函数参数只能传指针,不能传数组

今天被要求编写一个C/C++冒泡算法的程序,心想这还不是手到擒来的事儿,虽然最近都是用Javascript程序,很少写C/C++程序,但是好歹也用过那么多年的C语言: 首先想的是怎么让自己的代码看上去更高大上一点,怎么着也得能自动识别数组的长度吧:于是第一版程序如下,结果如下 看到结果,很是惊讶,为什么是2呢?看到后面我列出可执行文件的类型,应该知道,这个长度是指针的长度,64bit,刚好两个字节.说明sortof求得是指针的长度,而非数组的长度. 仔细想想,函数的参数只能传递指针,不能直接传递

mybatis使用map做入参

测试例子: controlelr层 1 package org.slsale.test; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import net.sf.json.JSONArray; 8 9 import org.slsale.pojo.User; 10 import org.springframework.beans.factory.annotation.Auto

C语言中函数参数为什么是由右往左入栈的?

先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *argv[]) { foo(100, 200, 300);

C语言中函数参数入栈的顺序 - Fangzhen - 博客园

.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -10%;-webkit-user-select: none;} .wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5;} .wiz-todo

汇编1 ----C语言函数1

构造以下C程序并在合适位置插入breakpoints 在Visual Studio 2015 CTP6对其反汇编. 下面来分析 z = add(1, 2); 009C170E 6A 02 push 2 ????int z; ????z = add(1, 2); 009C1710 6A 01 push 1 009C1712 E8 8D FA FF FF call 009C11A4 009C1717 83 C4 08 add esp,8 009C171A 89 45 F8 mov dword ptr